- 博客(331)
- 资源 (10)
- 收藏
- 关注
原创 Java NIO和BIO读写简单比较
通过对文件的读写所花的时间来进行比较。一、读写的文件二、实例代码package nio;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.nio.ByteBuffer;import java.nio.channels.FileCha
2017-03-19 15:30:14
1875
2
原创 Java NIO笔记之Buffer
一个Buffer对象是固定数量的大小的数据容器,作用是一个存储器或者分段运输区。 缓冲区的工作与通道紧密联系。通道是I/O传输发生时通过的入口,而缓冲区是这些数据传输的来源或目标。对于离开缓冲区的传输,您想传递出去的数据被置于一个缓冲区,被传送到通道。对于传回缓冲区的传输,一个通道将数据放置在您所提供的缓冲区中。这种在协同对象(通常是您所写的对象以及一到多个Channel对象)之间进行的缓
2017-03-12 16:55:29
613
原创 Scalable IO in Java的代码实现
最近在学习NIO相关的知识部分,在学习的时候,发现Doug Lea大神的一个PPT地址,里面的内容写的非常好,很值得学习,具体内容可以参见PPT和网上的文章,自己根据PPT中的例子和描述,自己将代码补充了一下。下面主要是PPT中的代码和实例。1.Basic Reactor Designpackage basic;import java.io.IOException;imp
2017-03-10 22:30:58
1622
1
原创 Java NIO笔记之IO基础概念
1.缓冲区 缓冲区是所有IO的基础,”输入/输出”就是将数据移进或移除缓冲区。进程IO操作的执行也是向操作系统发送请求,让它要么将缓冲区的数据排干(写),要么将缓冲区的填满数据(读)。 图 1-1 简单描述了数据从外部磁盘向运行中的进程的内存区域移动的过程。进程使用 read()系统调用,要求其缓冲区被填满。内核随即向磁盘控制硬件发出命令,要求其从磁盘读取数据。磁盘控制器把数据直接写
2017-03-06 00:04:09
654
原创 Java NIO笔记之内存映射文件
大致的原理图如下: FileChannel提供了一个map()的方法,该方法可以在一个打开的文件和一个特殊类型的ByteBuffer之间建立一个虚拟内存映射。在FileChannel上调用map( )方法会创建一个由磁盘文件支持的虚拟内存映射(virtual memory mapping)并在那块虚拟内存空间外部封装一个MappedByteBuffer对象。 MappedByteBuffer
2017-03-02 00:00:36
711
原创 Java IO字符流常见类进行分析(四)
一、Reader 用于读取字符流的抽象类。子类必须实现的方法只有 read(char[], int, int) 和 close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。 ready() 判断是否准备读取此流。 read() 读取单个字符,这个方法将会阻塞,直到字符可用。 二、BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字
2017-02-23 22:46:46
448
原创 Java IO字节输出流常见类进行分析(三)
一、OutputStream 一个抽象类,所有字节输出流的父类,一个输出流可以接受要输出的字节和发送到目的位置。 write(int):将一个字节输出。 flush():刷出数据,将缓冲区的数据刷出到目的地。 close():关闭流,是否系统资源,关闭之后不能重复打开并接不能重复打开。 二、ByteArrayOutputStream 将数据写入到数组中,缓冲区自动的增长。关闭流没有影响,
2017-02-23 22:18:35
540
原创 Java IO字节输入流常见类进行分析(二)
一、FileInputStream 从文件系统中读取一个文件转换成的字节 数据结构:public class FileInputStream extends InputStream{ /* File Descriptor - handle to the open file */ private final FileDescriptor fd; /* The path of
2017-02-21 23:17:45
930
原创 Java IO字节输入流常见类进行分析(一)
一、InputStream 所有字节输入的父类,是一个抽象类。 public abstract int read() throws IOException从流中读取下一个字节的数据,返回的数据是int类型的范围在0~255之间,如果流中没有数据,将会返回-1,这个方法将会阻塞直到流中有数据可用,这是一个抽象方法,子类必须提供方法的实现。 public int read(byte b[]) thr
2017-02-19 23:55:42
1224
转载 Java IO流整体结构
Java IO 部分类图结构:IO流的分类根据处理数据类型的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流字节流和字符流的区别读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。结论:只要是处理纯文本数据
2017-02-14 09:03:21
570
原创 java的四种引用
在java中引用分为4中,强引用(Strong Reference),弱引用(WeakReference),软引用(SoftReference),虚引用(PhantomReference)1.强引用 强引用是我们在编程过程中使用的最简单的引用,如代码String s=”abc”中变量s就是字符串对象”abc” 的 一个强引用。任何被强引用指向的对象都不能被垃圾回收器回收
2017-02-11 20:54:54
484
原创 Java并发之工具类CyclicBarrier
CyclicBarrier是java并发的工具类,它允许一组线程互相等待,直到到达某个公共屏障点。因为该barrier 在释放等待线程后可以重用,所以称它为循环的barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态。 看一下使用实例imp
2017-01-05 00:28:08
508
原创 Java并发之阻塞队列(三)
SynchronousQueue是阻塞队列的一种,每一次insert操作必须等在另外一个线程的remove操作,同步队列没有任何容器,甚至一个队列容器都没有.同步队列类似于 CSP 和 Ada 中使用的 rendezvous 信道。它非常适合于传递性设计,在这种设计中,在一个线程中运行的对象要将某些信息、事件或任务传递给在另一个线程中运行的对象,它就必须与该对象同步。对于正在等待的生产者和使用
2017-01-02 19:10:34
443
原创 Java并发之阻塞队列(二)
LinkedBlockingQueue一个由链表组合而成的有界阻塞队列. 1.LinkedBlockingQueue的数据结构 采用的是单链表结构 2.LinkedBlockingQueue源码分析 - 2.1继承关系public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements Block
2017-01-01 12:45:52
393
原创 Java并发之阻塞队列(一)
1.阻塞队列是一个增加了2个附加操作的队列,这2个操作是:当队列中元素为空时,获取元素线程会等待队列不为空,当队列满时,存储线程会等待队列中有空闲才会操作.这种操作常用于生产者和消费者的场景。阻塞队列提供了四种处理方法: 方法\处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put(e) offer(e,time,u
2016-12-31 12:49:38
599
1
原创 Java并发之线程池(三)
一、前言2016年即将过去,要抓紧时间,夯实java基础知识部分,为以后学习的新的知识做准备。二、线程池基本原理图 三、ThreadPoolExecutor的内部结构 1.Worker在里面是一个核心的内部类 private final class Worker extends Abst
2016-12-24 23:07:29
669
原创 Java并发之线程池Executors(二)
Executors: 一个工厂类和提供了一些工具方法,提供了返回ExecutorService,ScheduledExecutorService,ThreadFactory,Callable方法 提供了返回线程池的方法,都是静态方法例如: 一、部分方法列表public static ExecutorService newFixedThreadPool(int nThreads); //创建一个
2016-12-22 23:32:50
427
原创 Java并发之线程池(一)
1.线程池的继承关系图2.线程池架构图 3.部分结构和类的分析 3.1Executor 从上图可以看出Executor线程池的根接口,代码如下:public interface Executor { /** * Executes the given command at some time in the future. The command *
2016-12-21 22:46:24
464
原创 Thread中的interrupt(),interrupted(),isInterrupted()方法的详解
1.interrupt() 使用来中断线程作用的。除非当前线程处于中断状态,这个方法总是可以被执行的。如果当前线程被Object#wait() wait(long)或者Thread#join() join(long),sleep()方法所阻塞时,然而中断状态将被清空变成false,如果被IO/NIO阻塞,使用该方法,中断状态将被设置成true,未中断状态为false,中断状态为truepub
2016-12-18 20:44:25
1068
原创 linux下安装mysql5.7
在linux(centos)下有2种方式安装,第一种使用rpm安装在网上可以搜到,第二种使用压缩包方式,我这里是采用压缩包方式。1.这里我将mysql安装在/usr/local/mysql目录里面,也可以安装在其他地方mkdir /usr/local/mysql2.下载mysql压缩包 wget http://dev.MySQL.com/get/Downloads/MySQL-5.
2016-12-03 22:10:17
12378
原创 mysql中排序再分页遇到的重复数据
用一个简单实例,对遇到的问题复盘一下。 1.新建测试表 test_ordercreate table test_order( id int(11) not null auto_increment primary key, name varchar(10) not null, create_time datetime not null, state int(1) default '1
2016-11-30 22:50:55
6267
2
原创 项目部署到Tomcat中classes目录中配置文件不存在问题
注:主要是是根据我个人的情况来解决,并不是通用的方法。主要将output设置为projectName/target/classes,就可以解决。
2016-11-10 00:55:34
2778
翻译 Java原子变量
在 java.util.concurrent.atomic包下的类,在单个变量操作是支持原子操作的。其中的类有get和set方法和volatile变量的read和write方法一样,然而,一个set方法和随后的get方法在操作同一个变量的时候有一种happens-before关系原子的compareAndSet方法保证了内存的一致性的特性,然而在做一些简单的算术操作应用于integer原子
2016-10-29 19:24:33
391
原创 Thread源码浅析
一、Thread类的数据结构class Thread implements Runnable { //... private char name[];//线程的名字 private int priority;//线程的优先级 //... /* Whether or not the thread is a daemon thr
2016-10-29 00:09:25
443
原创 Java并发之CountDownLatch源码分析
CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。内部采用的公平锁和共享锁的机制实现。一、CountDownLatch的构造函数(采用的是一种公平锁机制)public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumen
2016-10-07 23:50:58
4766
1
原创 Java并发之Semaphore的源码分析
Semaphore是一个计数信号量,采用的是共享锁的方式来控制。主要对下面2个方法进行分析:acquire(int)来获取信号量,直到只有一个可以用或者出现中断。release(int)用来释放信号量,将信号量数量返回给Semaphorepublic void acquire(int permits) throws InterruptedException {
2016-10-06 23:06:11
1520
原创 Java并发之synchronized的解析
在JDK中没有太多的对synchronzied的解析,主要是同步作用。下面通过jvm的中synchronizer.cpp的源码来分析在这里可以下载jvm源码:http://hg.openjdk.java.net/synchronzier.cpp的目录在:hotspot-9646293b9637\src\share\vm\runtimesynchronized同步底层使用JNI调用Obj
2016-10-06 16:56:07
1175
原创 Java动态代理Proxy类的解析
Java动态代理Proxy类的解析使用过代理的,对Proxy不会感到陌生,主要分析Proxy类的内部结构。一、Proxy类的结构 /** * a cache of proxy classes * 缓存java代理类 */ private static final WeakCache<ClassLoader, Class<?>[], Class<?>>
2016-09-17 11:28:24
3735
1
原创 Java反射中getXXX和getDeclaredXXX的解析
今天复习一下Java反射部分知识,想获得一写新的知识点,在网上搜了一遍基本差不多的内容。讲讲getDeclaredXXX()和getXXX(),从网上搜的知识来看说,getDeclaredXXX()能访问私有的方法或属性,getXXX()只能访问公有的方法或属性,我之前也停留在这种水平,下面分享一下今天的学习。分析getFields VS getDeclaredFields,其他的类似。
2016-09-14 00:25:36
1277
原创 使用Ant与Junit进行自动化测试
使用Ant与Junit组合进行测试。1.项目结构图:2.文件代码Calculator.javapackage com.test.junit;public class Calculator{ public int add(int a, int b) { return a+b; } public int substact(int a, int b) { re
2016-08-14 23:55:02
3663
原创 使用Ant自动构建Java项目成jar包配置
使用Ant很方便将Java项目打成jar包,下面是自己写的一些配置。build.properties#set configurationtarget.dir=targettargetclasses.dir=target/classestargetlib.dir=target/libsourceclasses.dir=binsourcelib.dir=libsrc.dir=src
2016-08-14 21:57:49
2774
原创 使用Cobertura的命令行方式测试代码覆盖率
一、简介 Cobertura 是一种开源工具,它通过检测基本的代码,并观察在测试包运行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率。 下载Cobertura http://cobertura.github.io/cobertura/二、实例 1.新建一个项目junit01,结构如下:
2016-08-13 11:19:29
4704
原创 使用JDBC遇到SQL关键字in的问题
今天使用JDBC遇到SQL关键字in的问题String sql = "select sum(oil_mass),count(oil_id) from oil_bill where oil_id in (?) ";...PreparedStatement ps = conn.prepareStatement(sql);ps.setString(stationIds);//11,12,1
2016-08-03 22:46:39
4545
1
原创 Junit4部分注解
@BeforeClass:这个注解修饰public static void无参数的方法。修饰的方法运行在所有方法之前(包括@Before修饰的方法和类的默认构造方法前),而且只运行一次,同时会先执行父类的@BeforeClass修饰的方法(PS:子类不能重写父类方法)。@Before:从文档和源码中可以知道,作用范围是运行时(@Retention(value=RUNTIME)),目标是在方法上
2016-08-01 21:30:56
563
原创 MySQL使用like出现 操作MySQL数据库报出:Parameter index out of range (1 > number of parameters
...sql = "...where 1=1 and s.content like '%?%'";sqlValue.add(content);...一直出现错误Parameter index out of range (1 > number of parameters, which is 0)自己修改 sql = "...where 1=1 and s.content li
2016-08-01 08:56:23
1189
原创 Class类源码浅析
在java运行的应用中,类和接口代表着Class的实例。枚举是类的一种,注解是接口的一种,数组是属于类。Class的构造函数//只允许JVM创建Class对象private Class() {} Class的部分函数通过全类名,获取ClassClass forName(String className) 通过Class对象获取类的实例T newInstance() 获取类的名称,
2016-07-12 19:32:37
644
翻译 java泛型通配符
考虑到常规打印集合所有元素的问题,然而你将写一个比较好的版本(jdk1.5以前)void printCollection(Collection c) { Iterator i = c.iterator(); for (k = 0; k < c.size(); k++) { System.out.println(i.next()); }}然而有一个幼稚的
2016-07-09 14:36:19
580
原创 Java中的反射和内省简单实例
1.反射和内省 反射式在运行状态把Java类中的各种成分映射成相应的Java类,可以动态的获取所有的属性以及动态调用任意一个方法,强调的是运行状态。 内省机制是通过反射来实现的,BeanInfo用来暴露一个bean的属性、方法和事件,以后我们就可以操纵该JavaBean的属性。2.反射和内省的图一个简
2016-05-22 17:23:47
574
原创 [LeetCode]Flatten Binary Tree to Linked List
Given a binary tree, flatten it to a linked list in-place.For example,Given 1 / \ 2 5 / \ \ 3 4 6The flattened tree should look like: 1
2016-04-27 11:19:45
375
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人