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