Netty buffer缓冲区ByteBuf
byte 作为网络传输的基本单位,因此数据在网络中进行传输时需要将数据转换成byte进行传输。netty提供了专门的缓冲区byte生成api ByteBuf。
Buffer API主要包括:
- ByteBuf
 - ByteBufHolder
 
Netty 缓冲 API 提供了几个优势:
- 可以自定义缓冲类型
 - 通过一个内置的复合缓冲类型实现零拷贝
 - 扩展性好,比如 StringBuilder
 - 不需要调用 flip() 来切换读/写模式
 - 读取和写入索引分开
 - 方法链
 - 引用计数
 - Pooling(池)
 
ByteBuf索引
- 读索引
 - 写索引
 
ByteBuf使用模式
heap buffer(堆缓冲区)
- 数据存储在 JVM 的堆空间
 - GC 可以及时释放内存空间
 
direct buffer(直接缓冲区)
- 没有中间内存交换的二次拷贝,也就是通常说的“零”拷贝。
 - 驻留在垃圾回收扫描的堆区以外,需要手工管理内存(分配和释放等)。
 - 在 -XX:MaxDirectMemorySize=xxM大小限制下, 使用 Heap 之外的内存, GC对此”无能为力”,也就意味着规避了在高负载下频繁的GC过程对应用线程的中断影响。
 
composite buffer(复合缓冲区)
- 可以创建多个不同的 ByteBuf,然后提供一个这些 ByteBuf 组合的视图。
 - 复合缓冲区就像一个列表,我们可以动态的添加和删除其中的 ByteBuf,JDK 的 ByteBuffer 没有这样的功能。