我写了几个ByteBuf聚合器,我用它们来处理两种情况:
这两个都使用CompositeByteBufs来允许零拷贝,并且可以组成。
我没有在Netty管道中运行这个聚合器,因为我不知道要应用哪个转换。
使用这两个聚合器,会出现一个常见的情况;我创建的视图跨越了几个ByteBuf实例,并且通常不会在干净的ByteBuf边界上结束。
我天真地认为我可以派生出两个初始ByteBuf的片段,然后在相应的CompositeByteBuf中提供它们,这些CompositeByteBuf是为了保存视图而创建的。不幸的是情况并非如此,因为正如文档中提到的,CompositeByteBuf接管了底层ByteBuf的refcount所有权。有时,只要调用CompositeByteBuf.addComponent(),就会释放底层的ByteBuf。
我的问题是:有没有一种首选的方法呢?现在我在尾部调用Unpooled.copiedBuffer()来重复使用以避免上述问题,但是想知道是否可以实现真正的零拷贝,如果是,推荐的方式是什么。