CompositeByteBuf的readsBytes返回0

时间:2016-03-10 15:39:42

标签: netty

以下代码的问题是什么?即使在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>

是什么给出了?

2 个答案:

答案 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时,它可以为您完成此操作。