ByteBuf是Netty中用于处理二进制数据的缓冲区
Netty的ByteBuf是一个可用于高效存储和操作字节数据的数据结构。与传统的ByteBuffer相比,ByteBuf提供了更灵活、更强大的API。
主要特性:
ByteBuf则是Java NIO Buffer的新轮子,官方列出了一些ByteBuf的特性:
ByteBuf提供了一些较为丰富的实现类,逻辑上主要分为两种:
HeapByteBuf
DirectByteBuf
实现机制则分为两种:
PooledByteBuf
UnpooledByteBuf
除了这些之外,Netty还实现了一些衍生ByteBuf(DerivedByteBuf)
,如:ReadOnlyByteBuf
、DuplicatedByteBuf
以及SlicedByteBuf
。
HeapByteBuf
和DirectByteBuf
区别在于Buffer的管理方式:
HeapByteBuf
由Heap管理,Heap是Java堆的意思,内部实现直接采用byte[] array;DirectByteBuf
使用是堆外内存,Direct应是采用Direct I/O之意,内部实现使用java.nio.DirectByteBuffer
。UnpooledByteBuf
实现就是普通的ByteBuf了PooledByteBuf
是4.x之后的新特性DerivedByteBuf
是ByteBuf衍生类,实现采用装饰器模式对原有的ByteBuf进行了一些封装。ReadOnlyByteBuf
是某个ByteBuf的只读引用;DuplicatedByteBuf
是某个ByteBuf对象的引用;SlicedByteBuf
是某个ByteBuf的部分内容。Netty中的ByteBuf是一个强大的字节容器,用于处理字节数据。它的实现机制相当复杂,其主要特点如下
ByteBuf buffer1 = Unpooled.copiedBuffer("Hello, ".getBytes());
ByteBuf buffer2 = Unpooled.copiedBuffer("Netty!".getBytes());
CompositeByteBuf compositeBuffer = allocator.compositeBuffer();
compositeBuffer.addComponent(true, buffer1);
compositeBuffer.addComponent(true, buffer2);
// 使用compositeBuffer进行操作,它看起来像一个大的ByteBuf
CompositeByteBuf可以将多个ByteBuf组合成一个逻辑上的ByteBuf。