Netty的深入淺出--73.ByteBuf深入源碼理解及與ByteBuffer的區別

建議通過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()方法

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章