java jdk1.4中引入了nio后,ByteBuffer工具类也包含其中,这个工具类使用起来不太方便,因为从写状态变成读状态或者从读状态变成写状态需要调用flip()方法进行切换。而在Netty中对改工具进行了扩展---ByteBuf类,这个类中有三个下标来记录读写状态,分别为readerIndex、writerIndex和capacity。
readerIndex:表示读位置游标
writerIndex:表示写位置游标
capacity:表示数组容量
ByteBuf分为直接缓存区、堆缓冲区和混合缓存区,堆缓存区Heap是指二进制数组直接存储在jvm的堆内存中,读和写速度快,内存回收也快;直接缓冲区Direct是指将二进制数组存在堆内存外的区域,读写较慢,空间回收慢。但是ByteBuf数据如果需要通过网络进行传输,那么使用直接缓存区更快,因为堆缓存区的数据要发到网络中也需要先复制到直接缓存区后在flush到网络中。
派生缓冲区,可以调用ByteBuf对象的duplicate和slice等方法,这些方法能够返回一个新的ByteBuf实例,新实例的readerIndex、writerIndex是独立的,但是数组存储是共享的
ByteBuf和ByteBufHolder
按需分配类:ByteBufAllocator,这个接口有两个实现类:PooledByteBufAllocator、UnpooledByBufAllocator
非池化ByteBuf:Unpooled。