在学习编解码的过程中,我们看到 Netty 大量使用了自己实现的 ByteBuf 工具类,ByteBuf 是 Netty 的数据容器,所有网络通信中字节流的传输都是通过 ByteBuf 完成的。然而 JDK NIO 包中已经提供了类似的 ByteBuffer
类,为什么 Netty 还要去重复造轮子呢?那就要好好说说 ByteBuf。
文章目录
为什么是 ByteBuf
我们首先介绍下 JDK NIO 的 ByteBuffer,才能知道 ByteBuffer 有哪些缺陷和痛点。下图展示了 ByteBuffer 的内部结构:
从图中可知,ByteBuffer 包含以下四个基本属性:
-
mark:为某个读取过的关键位置做标记,方便回退到该位置;
-
position:当前读取的位置;
-
limit:buffer 中有效的数据长度大小;
-
capacity:初始化时的空间容量。
</