java ByteBuffer学习笔记

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

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

Buffer四个要点:

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

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

标记可以调用API设置,默认是NULL

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

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

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

Buffer二个重要的API:

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

创建一个ByteBuffer

//分配一个新的字节缓冲区
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

你可能感兴趣的:(java ByteBuffer学习笔记)