Netty CompositeByteBuf具有readableBytes返回0
以下代码有什么问题?它总是为readableBytes打印0,即使CompositeByteBuf中显然有数据Netty CompositeByteBuf具有readableBytes返回0,netty,Netty,以下代码有什么问题?它总是为readableBytes打印0,即使CompositeByteBuf中显然有数据 private void compositeTest() { ByteBuf buf1 = Unpooled.buffer(1024); buf1.writeBytes("hello".getBytes(StandardCharsets.UTF_8)); ByteBuf buf2 = Unpooled.buffer(1024);
private void compositeTest() {
ByteBuf buf1 = Unpooled.buffer(1024);
buf1.writeBytes("hello".getBytes(StandardCharsets.UTF_8));
ByteBuf buf2 = Unpooled.buffer(1024);
buf2.writeBytes("world".getBytes(StandardCharsets.UTF_8));
CompositeByteBuf composite = Unpooled.compositeBuffer();
composite.addComponent(buf1);
composite.addComponent(buf2);
System.out.println("Number of components " + composite.numComponents() +
", Composite readable bytes: " +
composite.readableBytes());
}
最后一个print语句将打印:
组件数量2,复合可读字节:0
我在pom.xml中使用这个:
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.0.34.Final</version>
</dependency>
伊奥·内蒂
讨厌的
4.0.34.1决赛
给出了什么?readableBytes()
计算为缓冲区writerIndex-readerIndex
。如果调用composite.writerIndex()
,您会注意到它也返回0
查看addComponent()
的文档:
请注意,此方法不会增加CompositeByteBuf的writerIndex。如果需要增加,您需要自己处理。
要使其正常工作,您可以手动设置writerIndex()
composite.writerIndex(buf1.writerIndex()+buf2.writerIndex())
您可能希望使用
unmooled.wrappedBuffer()
,这将为您完成此操作。您可以将addComponent(布尔递增WriterIndex,ByteBuf buffer)
与netty-4.1.x一起使用,当方法参数increaseWriterIndex
设置为true时,它可以为您完成此操作。尽管有文档记录,但非常混乱。如果CompositeBuffer不能提供零件的合并视图,那么它有什么意义呢。文档甚至说:“一个虚拟缓冲区,它将多个缓冲区显示为一个合并的缓冲区。”