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