前言
在了解了 ByteBuffer 的原理之后,再来理解Netty 的 ByteBuf 就比较简单了。
ByteBuf 是 Netty 框架封装的数据缓冲区,区别于 position、limit、flip等属性和操作来控制 ByteBuffer 的读写,ByteBuf 通过两个位置指针来协助缓冲区的读写操作,分别是readIndex和writeIndex。
readIndex、writeIndex和capacity变量存在以下关系:
0 <= readIndex <= writeIndex <= capacity
复制代码
实现原理
初始化 ByteBuffer 时,readIndex 和 writeIndex 取值一开始都是0。如下图所示:

当执行写入数据之后,writeIndex会增加,如下图所示:

当执行读入数据之后则会使readIndex增加,但不会超过writeIndex,如下图:

在读取之后,索引 0 到 readIndex位置的区域被视为废弃字节(discard)。可以调用discardReadBytes方法,来释放这部分空间,其作用类似于 ByteBuffer的compact()方法,移除无用的数据,实现缓冲区的重复利用。如下图,展示了执行discardReadBytes后的情况,相当于可写的空间变大了。

ByteBuf 的使用案例
为了更好的理解ByteBuf,编写了以下示例:

本文介绍了Netty的ByteBuf数据缓冲区,它通过读写指针协助操作。ByteBuf有堆缓冲、直接缓冲和复合缓冲三种模式,堆缓冲在JVM堆中存储数据,直接缓冲避免数据复制提高I/O性能,复合缓冲提供多个缓冲区的组合视图。文章通过实例展示了三种模式的使用,帮助读者理解ByteBuf的工作原理。
最低0.47元/天 解锁文章
229

被折叠的 条评论
为什么被折叠?



