为什么建议在 ChannelOutboundHandler 中仅使用具有 [byte] 操作的堆缓冲区。?

Why it is recommended to use only Heap Buffers with [byte] operations in ChannelOutboundHandler.?

我们正在努力开源 api 网关并使用 Netty 作为底层框架。

我看到了 Norman Maurer 的幻灯片。在其中一张幻灯片中,他提到

Only use heap buffers if need to operate on byte[] in ChannelOutboundHandler! By default direct ByteBuf will be returned by ByteBufAllocator.buffer(...).

Take this as rule of thumb

这个大拇指规则背后的原因是什么?

重要的部分是"if need to operate on byte[]"。因为只有在使用堆 ByteBufs 时才可以使用 byteBuf.array() 访问底层 byte[] 而无需执行额外的内存复制。