Buffer使用

Buffer是一个缓冲区的概念,即一个容器,里面放的是元素的序列。

Buffer有几个属性:
1.容量(capacity):即这个缓冲区可以存储元素的数量
2.限制(limit):即这个缓冲区可以读写的最后位置,官方的说就是第一个不应该读取或写入的元素的索引。
3.位置(position):当前要进行读写的位置,官方的说就是下一个要读取或写入的元素的索引。
4.标记(mark):一个索引,小于等于位置,用来回滚。

常用的几个操作是:
1.clear(),即清空缓冲区的内容,更改这几个属性的效果是,limit置为capacity,position置为0,丢弃标记,即mark置为空。
2.flip(),这个可以理解为接下来的“读”操作做好了准备,属性变化是,limit置为position,position置为0,丢弃标记,即mark置为空。可以这么理解,刚才向buffer里面输入了好多内容,这个时候position停到了最后一个输入的元素的位置,从0到这个位置都是我们上次的输入操作放到buffer里面的内容,接下来要读了,还是从position读起,那么把position置为0,就是第一个位置,limit限制一下读到这个buffer的末尾,就是刚才的position所在的位置。
3.rewind(),官方解释就是使缓冲区为重新读取已包含的数据做好准备,属性变化是limit保持不变,position置为0,与flip()的区别是limit不发生变化,我理解的是,之前的输入都不用了,搞一下,重新输入,其实和clear()也差不多了,具体还得看需求。
4.remaining(),获取position和limit之间的值,用来判断这个buffer里面的内容还够不够。
5.position(),获取当前位置。
6.reset(),把position置为之前保存的mark,如果没有,会抛异常
7.capacity(),返回buffer的容量。

建议:
1.在读取数据之前使用flip(),保证接下来的读操作作用的范围是之前输入值的区间部分。
2.一般会存在判断这个buffer的内容有没有把我们定制一个完整的数据流全部发过来,所以会比较remaining和定义的一条数据流的长度,这个时候会先保存当前的position,然后去比较,如果remaining不够,则回滚到记录的那个position,等下次或者数据流够的时候再读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值