2. netty系列之:netty中的ByteBuf详解
简介
netty中用于进行信息承载和交流的类叫做ByteBuf,从名字可以看出这是Byte的缓存区,那么ByteBuf都有哪些特性呢?一起来看看。
ByteBuf详解
netty提供了一个io.netty.buffer的包,该包里面定义了各种类型的ByteBuf和其衍生的类型。
netty Buffer的基础是ByteBuf类,这是一个抽象类,其他的Buffer类基本上都是由该类衍生而得的,这个类也定义了netty整体Buffer的基调。
先来看下ByteBuf的定义:
public abstract class ByteBuf implements ReferenceCounted, Comparable<ByteBuf> {
ByteBuf实现了两个接口,分别是ReferenceCounted和Comparable。Comparable是JDK自带的接口,表示该类之间是可以进行比较的。而ReferenceCounted表示的是对象的引用统计。当一个ReferenceCounted被实例化之后,其引用count=1,每次调用retain() 方法,就会增加count,调用release() 方法又会减少count。当count减为0之后,对象将会被释放,如果试图访问被释放过后的对象,则会报访问异常。
如果一个对象实现了ReferenceCounted,并且这个对象里面包含的其他对象也实现了ReferenceCounted,那么当容器对象的count=0的时候,其内部的其他对象也会被调用release()方法进行释放。
综上,ByteBuf是一个可以比较的,可以计算引用次数的对象。他提供了序列或者随机的byte访问机制。
注意的是,虽然JDK中有自带的ByteBuffer类,但是netty中的 ByteBuf 算是对Byte Buffer的重新实现。他们没有关联关系。