没有NIO以前,数据只能以流的形式来传输的,而在操做系统中,底层数据都是以块的形式读写,为了提升java io的性能,更好的利用操做系统的特性,于是提出了NIO。 html
Java NIO中得定义了数据容器做为缓冲区,即Buffer,在通道Channel传输数据都须要用到缓冲区。 java
Buffer四个要点: 性能
0<=标记 <=位置 <=限制 <=容量 spa
标记能够调用API设置,默认是NULL 操作系统
位置的开始值为0,再读写数据时移动到下一位,当时不能超过限制不然出现异常 code
限制默认为容量大小,在读数据时,为了读取到有效的数据(上次写数据时,没有写到容量处,有空余),通常在读取以前须要设置一个限制(设置为上次读数据的位置处),通常是调用flip()方法 htm
容量为分配的Buffer的固定大小 ip
Buffer二个重要的API: it
建立一个ByteBuffer io
//分配一个新的字节缓冲区 ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
循环语句经过buf缓冲区将字节从一个信道复制到另外一个信道:
buf.clear(); //将位置设置为 0,将限制设置为容量 while (in.read(buf) >= 0 || buf.position != 0) { buf.flip(); //将限制设置为当前位置,而后将位置设置为 0 out.write(buf); buf.compact(); //以防写入不完整 }
参考资料:
http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html