Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别

建议通过unpool的方法创建ByteBuf

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第1张图片

ByteBuf的迭代方式

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第2张图片

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

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第3张图片

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

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第4张图片

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第5张图片

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

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第6张图片

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

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第7张图片

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

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第8张图片

当调用discardReadBytes()方法之后

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第9张图片

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

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第10张图片

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

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第11张图片

运行结果

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第12张图片

 

创建下一个项目实例:

创建存放String的ByteBuf

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第13张图片

 查看copiedbuffer的源码实现

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第14张图片

判断bytebuf是不是以一个字节数组的形式存储 ,是的话返回true;

在堆中的缓存数据都是通过字节数组的形式,而操作系统中的缓存数据不是;

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第15张图片 

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第16张图片 

前面是编码,后面是解码

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第17张图片 

 我们查看一下它的类型

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第18张图片

ridx:0      从0开始读

widx: 11   一共有11个字节,从11的位置开始写

cap:33   bytebuf的容量,底层是可以自动扩容的

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第19张图片 

了解ByteBuf中的重要方法

 

arrayoffset()方法

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第20张图片 

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第21张图片 

readableBytes()方法

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第22张图片 

 返回的是可读的字节数

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第23张图片

所以根据readableBytes()方法我们可以这样进行遍历

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第24张图片 

取“张h”一共四个字节 ,完整的打印出来

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第25张图片

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

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第26张图片

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第27张图片 

clear()方法

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第28张图片 

discardReadBytes()方法

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第29张图片 

Netty的深入浅出--73.ByteBuf深入源码理解及与ByteBuffer的区别_第30张图片 

你可能感兴趣的:(Netty网络编程)