netty CompositeByteBuf是直接还是间接的

时间:2014-09-25 12:52:49

标签: java netty

我正在使用netty 4.1.0 beta3连续发送2个缓冲区:

channel.writeAndFlush(Unpooled.wrappedBuffer(byteBuf1, byteBuf2));

netty javadoc建议使用Unpooled.wrappedBuffer()。

但是,在创建复合缓冲区时,Unpooled的源代码会将“false”作为“direct”参数传递。

这是否意味着,当通过套接字发送时,结果缓冲区将被视为间接缓冲区(速度较慢),甚至byteBuf1和byteBuf2都是直接缓冲区?

2 个答案:

答案 0 :(得分:2)

这意味着在展开复合缓冲区时它不会使用直接缓冲区。如果两个缓冲区都是直接的,用于创建复合缓冲区,那肯定是直接的。

答案 1 :(得分:0)

看起来使用CompositeByteBuf创建的Unpooled是直接的:

来自4.0.32 Unpooled.java:

public static ByteBuf wrappedBuffer(int maxNumComponents, ByteBuf... buffers) {
        switch (buffers.length) {
        ...
        default:
            for (ByteBuf b: buffers) {
                if (b.isReadable()) {
                    return new CompositeByteBuf(ALLOC, --> false <--, maxNumComponents, buffers);
                }
            }
        }
        return EMPTY_BUFFER;
    }