ByteBuf
Java原生ByteBuffer
使用Buffer读写数据一般遵循以下四个步骤:
- 写入数据到Buffer(写)
- 调用
flip()
方法(写->读) - 从Buffer中读取数据(读)
- 调用
clear()
方法或者compact()
方法(读->写)
属性
属性名 | 说明 |
byte[] buff | 内部用于缓存的数组。 |
position | 当前读取的位置。 |
limit | 读写的上限,limit<=capacity。 |
capacity | 初始化时候的容量。 |
mark | 为某一读过的位置做标记,便于某些时候回退到该位置。 |
读写模式图解
put
ByteBuffer创建后即为写模式,该模式下,往buffer里写一个字节,并把postion移动一位。写模式下,一般limit与capacity相等。
flip
写完数据,需要开始读的时候,将postion复位到0,并将limit设为当前postion。
get
从buffer里读一个字节,并把postion移动一位。上限是limit,即写入数据的最后位置。
相关方法
ByteBuffer无论读写,范围都是从position~limit,因此读写模式进行切换时需要修改position和limit的值。
方法 | 说明 |
put | 写 |
get | 读 |
flip | 写模式->读模式(limit=position;position=0) |
rewind | 将position设为0,可以重读Buffer中的数据 |
clear | 读模式->写模式(忽略未读数据)。恢复到初始状态,接下来可进行写操作 |
compact | 读模式->写模式(不忽略未读数据)。将未读数据拷贝到Buffer起始处。将position设到最后一个未读元素正后面。 |
mark | 标记当前position |
reset | 重置position为标记位置 |
缺点
- 通过position和limit控制读写的范围不直观
- 读写模式切换需要调用对应方法,若不调用对应方法切换读写模式,会产生混乱
- 无法动态扩容