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 没有这样的功能。
本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/7794277.html,如需转载请自行联系原作者