Netty-源码分析ByteBuf-readSlice和readRetainedSlice使用细节

返回从当前readerIndex开始的此缓冲区的子区域的新分片,并将readerIndex增加新分片的大小(=长度)。
另请注意,此方法将不会调用retain(),因此不会增加引用计数。

 

跟slice极为相似,只是把原始缓冲区的readerIndex进行了增加

@Override
    public ByteBuf readSlice(int length) {
        checkReadableBytes(length);
        ByteBuf slice = slice(readerIndex, length);
        readerIndex += length;
        return slice;
    }
public static void main(String[] args) throws Exception {
		ByteBufAllocator allocator = PooledByteBufAllocator.DEFAULT;
		ByteBuf original = allocator.directBuffer(32);
		original.writeByte(1);
		original.writeByte(2);
		original.writeByte(3);
		original.writeByte(4);

		//分配子缓冲区
		ByteBuf sub = original.readSlice(3);

		//原始缓冲区readerIndex=3, readableBytes=1
		System.out.println("org.readerIndex = " + original.readerIndex());
		System.out.println("org.readableBytes = " + original.readableBytes());

		//原始缓冲区引用计数器不变refCnt=1
		System.out.println("org.refCnt=" + original.refCnt());
		//释放一次
		original.release();
}

 


	public static void main(String[] args) throws Exception {
		ByteBufAllocator allocator = PooledByteBufAllocator.DEFAULT;
		ByteBuf original = allocator.directBuffer(32);
		original.writeByte(1);
		original.writeByte(2);
		original.writeByte(3);
		original.writeByte(4);

		//分配子缓冲区
		ByteBuf sub = original.readRetainedSlice(3);

		//原始缓冲区readerIndex=3, readableBytes=1
		System.out.println("org.readerIndex = " + original.readerIndex());
		System.out.println("org.readableBytes = " + original.readableBytes());

		//原始缓冲区引用计数器改变refCnt=2
		System.out.println("org.refCnt=" + original.refCnt());
		//释放一次
		original.release();

		//子缓冲区再释放一次
		sub.release();
		System.out.println("org.refCnt=" + original.refCnt());
}

QQ群:212320390

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值