建议通过unpool的方法创建ByteBuf

ByteBuf的迭代方式

这里和nio的bytebuffer有很大的区别,bytebuffer是通过一个postion指针和limit来同时处理读和写操作,而bytebuf则是分开,读操作使用ReaderIndex,写操作使用WriterIndex。

理解bytebuf的底层存储数据的方式


通过迭代的方式进行数据读取

在java中一个整数占4个字节

读取之后的数据属于discardable bytes区域中;

当调用discardReadBytes()方法之后

调用clear()方法,简单来说就是指针的重置

在bytebuf中write方法和read方法中指针都是相对的

运行结果

创建下一个项目实例:
创建存放String的ByteBuf

查看copiedbuffer的源码实现

判断bytebuf是不是以一个字节数组的形式存储 ,是的话返回true;
在堆中的缓存数据都是通过字节数组的形式,而操作系统中的缓存数据不是;
前面是编码,后面是解码
我们查看一下它的类型

ridx:0 从0开始读
widx: 11 一共有11个字节,从11的位置开始写
cap:33 bytebuf的容量,底层是可以自动扩容的
了解ByteBuf中的重要方法
arrayoffset()方法
readableBytes()方法
返回的是可读的字节数

所以根据readableBytes()方法我们可以这样进行遍历
取“张h”一共四个字节 ,完整的打印出来

其中isWritable()方法 ,isReadable()方法

clear()方法
discardReadBytes()方法
博客主要介绍ByteBuf相关知识,建议用unpool方法创建。对比了ByteBuf与nio的ByteBuffer,指出ByteBuf读写操作指针分开。还阐述了ByteBuf底层存储数据方式、迭代读取数据方法,介绍了ByteBuf中重要方法,如readableBytes()、isWritable()等。
669

被折叠的 条评论
为什么被折叠?



