以下代码的问题是什么?即使在CompositeByteBuf中有明显的数据,它总是为readableBytes打印0。
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>
是什么给出了?
答案 0 :(得分:1)
readableBytes()
计算为缓冲区writerIndex - readerIndex
。如果你致电composite.writerIndex()
,你会发现它也会返回0.
查看addComponent()
的文档:
http://netty.io/4.0/api/io/netty/buffer/CompositeByteBuf.html#addComponent(io.netty.buffer.ByteBuf)
Be aware that this method does not increase the writerIndex of the CompositeByteBuf. If you need to have it increased you need to handle it by your own.
要使其正常工作,您可以手动设置writerIndex()
。
composite.writerIndex(buf1.writerIndex() + buf2.writerIndex())
您可能希望使用Unpooled.wrappedBuffer()
来为您执行此操作。
答案 1 :(得分:0)
您可以将UserDefaults
与netty-4.1.x一起使用,将方法参数UserDefaults
设置为true时,它可以为您完成此操作。