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

转载于:https://my.oschina.net/u/220934/blog/368902

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值