Java 提供 ByteBuffer使用

Jdk原生的 ByteBuffer 还是比较难用的。

你可以认为它是读写一体的。但是它读的时候不可以写,写的时候不可以读,因为它记录读写的位置只有一个 变量。

position 记录写或读的 index。

limit     记录可写的最大位置或可读的最大位置。

capacity 创建 ByteBuffer 的总容量。


ByteBuffer 属性说明

写的时候:

position从0开始,每次一个字节 position++, position代表可写的位置。
limit等于 capacity,position可以达到的上限,position等于limit时不可以在写。
capacity最大的容量。

读的时候:

position从0开始,每次一个字节 position++, position代表可读的位置。
limitlimit值被赋值为最后一个数据的位置,position等于limit时不可以在读。
capacity最大的容量。

ByteBuffer用法 

下面表格显示position limit 在读写整理等变化

这种读写只能存在一种状态,要么读,要么写,如果需要读则需要转为读,写的话得转为写。

1. 创建一个ByteBuffer (使用 数组的方式, jdk内存)

ByteBuffer bf = ByteBuffer.allocate(100); // 创建 容量为 100

position0
limit100
capacity100

2. putInt 写4字节, 写了两次

bf.putInt(1000); // int 是 4字节

bf.putInt(3999); // int 是 4字节

// 此时剩余可写长度 limit - position = 92

position8
limit100
capacity100

3. put 写 1 字节 写了1次

bf.put((byte)1); // 此时剩余可写长度 limit - position = 91

position9
limit100
capacity100

4. flip 转化为读

bf.flip(); // 转化为读状态后,可读长度就是 limit-position = 9

flip() {
    limit = position;
    position = 0;
    mark = -1;
}

 

position0
limit9
capacity100

5. getInt() 读 4字节

int val = bf.getInt(); // val = 1000, 此时可读长度 limit-position = 5

position4
limit9
capacity100

6. compact() 整理并切换为写。移除已读部分。

bf.compact(); // 此时可写长度 limit - position = 95

position5
limit100
capacity100

7 clear() 清理, 可以写。

clear() {
    position = 0;
    limit = capacity;
    mark = -1;
}
position0
limit100
capacity100

 

 

 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值