ByteBuf

ByteBuf

Java原生ByteBuffer

使用Buffer读写数据一般遵循以下四个步骤:

  1. 写入数据到Buffer(写)
  2. 调用flip()方法(写->读)
  3. 从Buffer中读取数据(读)
  4. 调用clear()方法或者compact()方法(读->写)

属性

属性名

说明

byte[] buff 内部用于缓存的数组。
position 当前读取的位置。
limit 读写的上限,limit<=capacity。

capacity

初始化时候的容量。
mark 为某一读过的位置做标记,便于某些时候回退到该位置。

读写模式图解

put

ByteBuffer创建后即为写模式,该模式下,往buffer里写一个字节,并把postion移动一位。写模式下,一般limit与capacity相等。

 ByteBuf_第1张图片

flip

写完数据,需要开始读的时候,将postion复位到0,并将limit设为当前postion。 ByteBuf_第2张图片

get

从buffer里读一个字节,并把postion移动一位。上限是limit,即写入数据的最后位置。 ByteBuf_第3张图片

 

相关方法

ByteBuffer无论读写,范围都是从position~limit,因此读写模式进行切换时需要修改position和limit的值。

 

方法

说明

put

get

flip

写模式->读模式(limit=position;position=0)

rewind 将position设为0,可以重读Buffer中的数据

clear

读模式->写模式(忽略未读数据)。恢复到初始状态,接下来可进行写操作

compact

读模式->写模式(不忽略未读数据)。将未读数据拷贝到Buffer起始处。将position设到最后一个未读元素正后面。

mark

标记当前position

reset

重置position为标记位置

缺点

  1. 通过position和limit控制读写的范围不直观
  2. 读写模式切换需要调用对应方法,若不调用对应方法切换读写模式,会产生混乱
  3. 无法动态扩容

 

参考

  1. Java NIO系列教程(三) Buffer
  2. Java NIO 的前生今世 之三 NIO Buffer 详解
  3. Java NIO学习笔记之二-图解ByteBuffer
  4. ByteBuf:Netty的数据容器

你可能感兴趣的:(java技术)