1

在 ReplayingDecoder 派生的 ByteToMessage 解码器 ( https://github.com/netty/netty/blob/master/codec/src/main/java/io/netty/handler/codec/ByteToMessageDecoder.java ) 中,累积 ByteBuf (用于累积数据,直到从网络中读取足够的数据以开始解码)似乎像动态数组一样实现。

我的意思是,如果当前累积 ByteBuf 具有保留传入数据的能力,则将其复制到累积 ByteBuf。如果容量不足,则扩展累积ByteBuf,将之前的累积ByteBuf和传入的数据都写入新分配的实例。有没有理由在这里不使用具有有限数量组件的 CompositeByteBuf?

使用 PooledByteBufAllocator 应该有助于减少内存分配的数量,但在我看来,将 CompositeByteBuf 与 PooledByteBufAllocator 结合使用仍然是最有效的解决方案,因为它会尝试优化内存分配和副本。

然而,在我为零复制聚合实现我自己的管道阶段的兔子洞之前,我想问一下当前实现是否有特定原因(例如,CompositeByteBuf 的构造是否由以下之一在后台执行复制调用,或者有人已经发现当前的策略在经验上更好?)

提前致谢

4

0 回答 0