1. ByteBuf简介

网络上数据的基本单位是字节,Java NIO提供的ByteBuffer作为字节容器并不好用,所以Netty提供了替代品ByteBuf类,具有很多优秀的特性:

1.1 基本结构

ByteBuf除了保存字节内容外,还会维护2个索引——读索引readerIndex和写索引writerIndex,当从其中读数据时,读索引readerIndex会递增,当写入ByteBuf时,写索引writerIndex会递增。 另外,ByteBuf还维护了废弃字节和可扩容字节这两个属性。ByteBuf默认容量限制为Integer.MAX_VALUE。

1.2 分类维度

ByteBuf都可以划分归属到三个不同的维度中(看不明白可以光看加黑部分,有个概念即可):

Netty通过ByteBufAllocator分配器来创建ByteBuf,分配器有两种实现:

1.3 池化和非池化

为什么Netty要使用池化技术,内容实在太多,有兴趣的可以看这一篇:

Java中看内存分配—Netty内存池