什么时候在 netty 中使用 Unpooled

when to use Unpooled in netty

我想知道什么时候在 Netty 中使用 Unpooled。一些示例显示将 byte[] 包装在 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[] 和传递自己通过调用 Unpooled#wrappedBuffer(byte[]) 创建的 ByteBuf 之间没有根本区别。后者可能更明确地指出使用非池化缓冲区,以防在特定应用程序的上下文中池化与非池化缓冲区的使用很重要。

如果您需要有关池缓冲区的更多详细信息,Netty "New and noteworthy in 4.0" 维基页面在 Pooled buffers 部分有很好的介绍。