Buffer中读模式和写模式的切换

Channel和Buffer

channel和buffer关系密切,channel是双向的,既可以读也可以写,但是channel是依赖于Buffer的类进行数据读写的,同一个Buffer对象也可以读和写。
在这里插入图片描述

向Buffer写入数据

capacity指针指的是这个buffer对象中最多可以写入的数据的位置
position指的是目前所在的位置
limit
在这里插入图片描述

Buffer中写入数据后

position指针会跟着往下移动
在这里插入图片描述

Buffer中写模式转换成读模式

在Buffer中使用flip()函数进行模翻转
在这里插入图片描述
position和limit两个指针会移动到可读的位置限制读取范围,如下图所示
在这里插入图片描述

一次性读完所有数据

在这里插入图片描述

读完所有数据后从读模式变成写模式

使用clear()函数将position指针和limit指针移动到初始位置
在这里插入图片描述

如果一次不读完所有数据转成写模式呢?

这次没有读完所有的数据,而是留下了一个空间没有读取,这个时候将读模式变成写模式该怎么办呢?
在这里插入图片描述
解决办法:使用compact()函数
将没有读取的数据拷贝到顶端去
在这里插入图片描述
limit指针和position指针移动到指定的位置,那么下次就可以直接进行写入了
在这里插入图片描述
写入还是正常写入,等到下次读取数据的时候,会直接从拷贝过去的顶端数据直接读取。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值