ByteBuffer通常用于Java原生NIO操作中,對Channel進行讀取或者寫入,其中封裝了一些操作byte數組的方法,還是很實用的。
ByteBuffer的幾個基本屬性:
position:表示進行下一個讀寫操作的下標位置
limit:表示進行讀寫操作時的結束位置;
capacity:表示存儲的容量
mark: 對數據進行標記
初始化:對ByteBuffer進行初始化,可以使用靜態方法wrap(byte[] data)
封裝數組,也可以通過另一個靜態方法allocate(int size)
初始化指定長度的ByteBuffer。
初始狀態:position:0,limit:值為最大長度,capacity:值為最大長度
bytebuffer-init.png
數據寫入(或讀取):每寫入(或讀取)一個值,position加一(圖中是寫入兩個數據之后的位置)。
bytebuffer-write.png
準備讀取(或寫入):使用flip()
方法翻轉準備數據讀取(或寫入),進行讀取(或寫入)時,不能超過limit限制,讀超出限制報錯BufferUnderflowException
(寫超出限制報錯BufferOverflowException
)
bytebuffer-flip.png
清除數據:回到初始狀態可以調用clear()
方法,但是數據并不會刪除,當寫入時會直接覆蓋對應位置的值。
bytebuffer-clear.png
標記位置:當需要進行標記時,可以使用mark()
方法,即mark=position
;進行讀取后,可調用reset()
方法直接回到mark標記的位置,即position=mark
。