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指针移动到指定的位置,那么下次就可以直接进行写入了
写入还是正常写入,等到下次读取数据的时候,会直接从拷贝过去的顶端数据直接读取。