我试图弄清楚何时在Netty中使用Unpooled。一些示例显示将字节[]包装在Unpooled.wrappedBuffer
中,而某些示例仅显示
ctx.writeAndFlush(bytes); // where bytes is just byte[]
是否有关于何时使用Unpooled的指南?
最佳答案
将byte[]
传递给Netty write
方法等效于传递未池化的ByteBuf
。我们可以在ByteArrayEncoder
的源代码中看到这一点,它在内部调用Unpooled#wrappedBuffer(byte[])
:
@Override
protected void encode(ChannelHandlerContext ctx, byte[] msg, List<Object> out) throws Exception {
out.add(Unpooled.wrappedBuffer(msg));
}
因此,传递
byte[]
和传递通过调用ByteBuf
创建的自己创建的Unpooled#wrappedBuffer(byte[])
之间没有根本的区别。如果在特定应用程序的上下文中使用池化与未池化比较重要,则后者可能更明确地表示调用未池化缓冲区。如果您需要有关缓冲池的更多详细信息,Netty“ 4.0中的新功能和值得注意的功能” Wiki页面在Pooled buffers部分中进行了很好的介绍。