什么时候在 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 部分有很好的介绍。
我想知道什么时候在 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 部分有很好的介绍。