java ByteBuffer学习笔记

没有NIO以前,数据只能以流的形式来传输的,而在操做系统中,底层数据都是以块的形式读写,为了提升java io的性能,更好的利用操做系统的特性,于是提出了NIO。 html

Java NIO中得定义了数据容器做为缓冲区,即Buffer,在通道Channel传输数据都须要用到缓冲区。 java

Buffer四个要点: 性能

  1. 位置
  2. 限制
  3. 容量
  4. 标记
他们之间的关系为:

0<=标记 <=位置 <=限制 <=容量 spa

标记能够调用API设置,默认是NULL 操作系统

位置的开始值为0,再读写数据时移动到下一位,当时不能超过限制不然出现异常 code

限制默认为容量大小,在读数据时,为了读取到有效的数据(上次写数据时,没有写到容量处,有空余),通常在读取以前须要设置一个限制(设置为上次读数据的位置处),通常是调用flip()方法 htm

容量为分配的Buffer的固定大小 ip

Buffer二个重要的API: it

  • clear() 使缓冲区为一系列新的通道读取或相对放置 操做作好准备:它将限制设置为容量大小,将位置设置为 0。
  • flip() 使缓冲区为一系列新的通道写入或相对获取 操做作好准备:它将限制设置为当前位置,而后将位置设置为 0。

建立一个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

相关文章
相关标签/搜索