返回

提问 添加收藏

Netty中EmbeddedChannel.writeInbound为什么会对引用计数减1?

pinitianjie 发布于 2018年02月13日 (共有0个回帖)

        ByteBuf buf = Unpooled.buffer();
        for (int i = 0; i < 9; i++) {
            buf.writeByte(i);
        }
        ByteBuf input = buf.duplicate();
        EmbeddedChannel channel = new EmbeddedChannel(new FixedLengthFrameDecoder(3));
        assertTrue(channel.writeInbound(input.retain()));
        assertTrue(channel.finish());

        ByteBuf read = (ByteBuf) channel.readInbound();
        assertEquals(buf.readSlice(3), read);
        read.release();

 

    在黄色行,调用了input.retain()使引用计数加1,我理解这是因为channel.writeInbound()方法会使input的引用计数减1,为了确保后续依然能够使用这个ByteBuf才进行了这个操作。

    那么,有两个问题:

    1、为什么要在channel.writeInbound()方法中对引用计数进行减1?

    2、在什么情况下Netty会自动对引用计数进行减1。

JavaNetty
文明上网,理性发言
客户端 Android iPhone WP7