在多个CompositeByteBuf实例中共享netty ByteBuf的推荐方法是什么?

时间:2017-07-29 17:48:40

标签: java netty

我写了几个ByteBuf聚合器,我用它们来处理两种情况:

  • 提取标题+尾部包装中包含的内容
  • 聚合到相同大小的ByteBuf实例

这两个都使用CompositeByteBufs来允许零拷贝,并且可以组成。

我没有在Netty管道中运行这个聚合器,因为我不知道要应用哪个转换。

使用这两个聚合器,会出现一个常见的情况;我创建的视图跨越了几个ByteBuf实例,并且通常不会在干净的ByteBuf边界上结束。

我天真地认为我可以派生出两个初始ByteBuf的片段,然后在相应的CompositeByteBuf中提供它们,这些CompositeByteBuf是为了保存视图而创建的。不幸的是情况并非如此,因为正如文档中提到的,CompositeByteBuf接管了底层ByteBuf的refcount所有权。有时,只要调用CompositeByteBuf.addComponent(),就会释放底层的ByteBuf。

我的问题是:有没有一种首选的方法呢?现在我在尾部调用Unpooled.copiedBuffer()来重复使用以避免上述问题,但是想知道是否可以实现真正的零拷贝,如果是,推荐的方式是什么。

0 个答案:

没有答案