Netty的数据处理API通过两个组件暴露ByteBuf和ByteBufHolder
ByteBuf API优点如下:
a.他可以被用户自定义的缓冲区类型扩展
b.通过内置的符合缓冲区类型实现了透明的零拷贝
c.容量可以按需增长(类似于StringBuffer)
d.在读和写这两种模式之间的切换不需要调用ByteBuffer的flip()方法
e.读和写使用了不同的索引
f.支持方法的链式调用
g.支持引用计数
h.支持池化
--------------------------
1、ByteBuf维护了两个不同的索引:一个用于读;一个用于写
2、read或者write方法会推进其索引;set和get开头的操作则不会
ByteBuf分三种模式:
a.支撑数组(backing array):将数据存储在JVM的堆空间。它能在没有使用池化的情况提供快速的分配和释放。
b.直接缓冲区:直接缓冲区对于网络数据传输是理想的选择。主要缺点,相对于基于堆的缓冲区,它们的分配和释放都较为昂贵。
c.复合缓冲区:通过ByteBuf的子类CompositeByteBuf实现这个模式,它提供了一个将多个缓冲区表示为单个合并缓冲区的虚拟表示。
3、派生缓冲区为ByteBuf提供视图
duplicate()、slice()等 ps:只是视图,修改视图会改变原ByteBuf
ByteBuf复制通过copy()、copy(int,int)可以复制出独立副本。