bytebuffer 内部结构

本文详细介绍了Java中的ByteBuffer,包括其核心属性capacity、position和limit的角色。在写模式下,position随着数据写入移动,limit设定写入上限。调用flip()方法后,进入读模式,position重置,limit变为已写入数据的位置。读取数据后,get()方法会移动position至limit,表示读取结束。clear()方法将ByteBuffer重置为写模式。若未完全读取数据就需要写入,compact()方法允许从现有数据末尾开始写入,避免数据丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ByteBuffer 内部结构

ByteBuffer 重要的属性

  • capacity: 容量 . bytebuffer中能装多少数据
  • position: 读写指针. 索引下标
  • limit: 读写的限制

一开始postion 在起始位置, limit 为写入的限制大小,
在这里插入图片描述
写模式下, 写了4个值, position 进行了4个位置的移动, limit为写入的容量.
在这里插入图片描述
调用flip() 方法后, 开启读模式 , postion重新从0开始读, limit 从capacity的位置, 移动到上一步读取数据的位置, 因为写入只写入到d的位置, 无需读取到capacity的位置.
在这里插入图片描述
读取4个字节后的状态, 调用get() 方法后, position 移动位置到了limit的位置, 则读取完毕.
在这里插入图片描述
调用clear方法后, 切换到了写模式, position回到了0的位置, limit回到了capacity的位置, 代表可以写入capacity大小的数据.
在这里插入图片描述
compact方法: 由于某种原因, 没有读取完数据就要写数据, 如下原本数据中有abcd四个字节的数据, 读到ab了 , 就要写数据了, 调用compact方法, 则是从d后开始开始写数据, 而不是从0的位置写数据, 这样防止了数据的丢失.
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值