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相等。

 

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为标记位置

缺点

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

 

参考

  1. Java NIO系列教程(三) Buffer
  2. Java NIO 的前生今世 之三 NIO Buffer 详解
  3. Java NIO学习笔记之二-图解ByteBuffer
  4. ByteBuf:Netty的数据容器
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值