说明
- 利用io.netty.buffer.ByteBufUtil的 isAccessible(ByteBuf buffer)方法,可以判断一个ByteBuf是否可以访问。它内部就是用ByteBuf的引用计数是否为0来判断的。如果引用数不为0,返回true。
示例
是否可以访问随ByteBuf引用计数的动态变化
package com.thb;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
public class Demo {
public static void main(String[] args) {
// 创建一个ByteBuf
ByteBuf buf = Unpooled.buffer();
// 当前的引用计数是1
System.out.println("before release, buf.refCnt: " + buf.refCnt());
// 当前buffer的引用计数是1,所以返回结果为true
System.out.println("before relase, buffer is isAccessible: " + ByteBufUtil.isAccessible(buf));
// 释放
buf.release();
// 当前的引用计数是0
System.out.println("after release, buf.refCnt: " + buf.refCnt());
// 当前buffer的引用计数是1,所以返回结果为false
System.out.println("after relase, buffer is isAccessible: " + ByteBufUtil.isAccessible(buf));
}
}
运行输出:
before release, buf.refCnt: 1
before relase, buffer is isAccessible: true
after release, buf.refCnt: 0
after relase, buffer is isAccessible: false