共同学习Netty源代码--ByteBuf(一)
来源:互联网 发布:dlt算法~ 编辑:程序博客网 时间:2024/05/16 19:24
Java NIO的API中最重要的三个接口是Selector、Channel和Buffer,其中Selector就像公交车调度管理者、Channel就像公交车、Buffer就像公交车上的座位,而数据就像乘客在这三个的协同作用下进行传输。
Netty封装了自己的buffer,也就是ByteBuf抽象类,先来看这个类。
public abstract class ByteBuf implements ReferenceCounted, Comparable<ByteBuf>
这个抽象类实现了ReferenceCounted接口和Comparable接口,后者不必多说,前者我查了一下资料,说是Netty4开始,相关对象的生命周期不再由垃圾回收器管理,而是由这个接口的实现类管理,来改进分配内存和释放内存的性能。从字面意义来看,这个接口的含义是引用计数,我的理解是,堆内存里的对象在栈内存中有多少引用。
这个接口定义了几个方法:
int refCnt();
返回引用数,如果为0,则表示该对象没有引用了。
ReferenceCounted retain();
这个方法用来增加一个引用计数器。
ReferenceCounted retain(int increment);
这个方法用来增加指定个引用计数器。
ReferenceCounted touch();
这个方法记录了当前可访问的位置,现在还不懂这个位置是什么。
ReferenceCounted touch(Object hint);
这个方法和上面一样,但是传入了一些备用信息。
boolean release();
这个方法用来减少一个引用计数器。
boolean release(int decrement);
这个方法用来减少若干个引用计数器。
如果引用计数器减少到0,那么这个对象就会被收回。
现在回来看ByteBuf类。
public abstract int capacity();
这个抽象方法用来返回这个缓冲区可以承载多少字节的数据。
public abstract ByteBuf capacity(int newCapacity);
这个抽象方法用来替换当前这个缓冲区的容量,如果参数容量小于当前容量,则会砍掉一部分当前容量中的数据,反之会增加一些未被占有的容量。
public abstract int maxCapacity();
这个方法返回这个缓冲区最大的容量。
public abstract ByteBufAllocator alloc();
这个抽象方法返回分配这个缓冲区的ByteBufAllocator,也就是缓冲区分配器。
public abstract ByteOrder order();
这个方法返回这个缓冲区的字节顺序。
public abstract ByteBuf order(ByteOrder endianness);
这个方法返回一个按照参数字节排序方式排序的ByteBuf。
public abstract ByteBuf unwrap();
如果这个缓冲区包裹了别的缓冲区,则返回被包裹的缓冲区,否则返回空。
- 共同学习Netty源代码--ByteBuf(一)
- netty 学习之bytebuf
- 共同学习Netty源代码--开篇语
- Netty ByteBuf
- Netty ByteBuf
- 共同学习Java源代码-数据结构-TreeSet(一)
- 共同学习Java源代码-数据结构-HashMap(一)
- 共同学习Java源代码-数据结构-LinkedHashMap(一)
- netty学习之二:ByteBuf解读
- Netty学习12-缓冲区【2】ByteBuf
- netty源码学习第三章:ByteBuf
- Netty学习之旅----ByteBuf内部结构与API学习
- 共同学习Java源代码--常用工具类--AbstractStringBuilder(一)
- 共同学习Java源代码--常用工具类--StringBuffer(一)
- 共同学习Java源代码--数据结构--AbstractCollection抽象类(一)
- 共同学习Java源代码--数据结构--AbstractList抽象类(一)
- 共同学习Java源代码--数据结构--ArrayList类(一)
- 共同学习Java源代码--数据结构--LinkedList类(一)
- 机器学习—逻辑回归理论简介
- 微信和app之间的跳转实现
- ubuntu 16.04 安装PhpMyAdmin
- Netty 示例代码注解
- java.lang.NoClassDefFoundError 异常解读
- 共同学习Netty源代码--ByteBuf(一)
- Android自定义属性
- 笔试题52. LeetCode OJ (39)
- STM32F407时钟树
- 针对物联网中MQTT协议的学习(三)
- ISE操作问题点集合
- 347 Top K Frequent Elements
- Starting httpd: (13)Permission denied: httpd: could not open error log file
- php 判断skip32 加密后是否有重复