1. ByteBuffer 在 Netty Unpooled.wrappedBuffer 的零拷贝应用
ByteBuffer 在 Netty Unpooled.wrappedBuffer 的零拷贝应用是什么?
- Unpooled.wrappedBuffer
- ByteBuf 零拷贝包装
- 堆外/堆内缓冲
Netty 的 Unpooled.wrappedBuffer(byte[]) 将已有字节数组包装为 ByteBuf,不拷贝数据,直接复用底层数组,实现零拷贝(避免额外的数据复制)。Unpooled.wrappedBuffer 还可包装 ByteBuffer、多个 buffer(CompositeByteBuf)。应用场景:将已从网络/文件读取的字节数组包装为 ByteBuf 进行处理,避免复制;将 JDK ByteBuffer 包装为 Netty ByteBuf 以便使用 Netty API。零拷贝体现在包装不复制数据,只建立视图。注意:wrappedBuffer 不管理底层数组的所有权(不在池中),释放需注意。理解 wrappedBuffer 零拷贝包装(不复制、复用数组)是本题关键。
核心是 wrappedBuffer 将字节数组/ByteBuffer 包装为 ByteBuf 不复制数据,实现零拷贝。理解其应用与语义是本题关键。
byte[] data = readFromSocket();
ByteBuf buf = Unpooled.wrappedBuffer(data); // 零拷贝包装,不复制