我试图弄清楚何时在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部分中进行了很好的介绍。

10-06 08:59