ByteBuffer通常用于Java原生NIO操作中盔腔,對Channel進行讀取或者寫入,其中封裝了一些操作byte數(shù)組的方法月褥,還是很實用的弛随。
ByteBuffer的幾個基本屬性:
position:表示進行下一個讀寫操作的下標位置
limit:表示進行讀寫操作時的結(jié)束位置;
capacity:表示存儲的容量
mark: 對數(shù)據(jù)進行標記
初始化:對ByteBuffer進行初始化宁赤,可以使用靜態(tài)方法wrap(byte[] data)
封裝數(shù)組舀透,也可以通過另一個靜態(tài)方法allocate(int size)
初始化指定長度的ByteBuffer。
初始狀態(tài):position:0,limit:值為最大長度,capacity:值為最大長度
數(shù)據(jù)寫入(或讀染鲎蟆):每寫入(或讀茹倒弧)一個值,position加一(圖中是寫入兩個數(shù)據(jù)之后的位置)佛猛。
準備讀然蟀拧(或?qū)懭耄?/strong>:使用flip()
方法翻轉(zhuǎn)準備數(shù)據(jù)讀取(或?qū)懭耄┘陶遥M行讀人旄(或?qū)懭耄r,不能超過limit限制婴渡,讀超出限制報錯BufferUnderflowException
(寫超出限制報錯BufferOverflowException
)
清除數(shù)據(jù):回到初始狀態(tài)可以調(diào)用clear()
方法幻锁,但是數(shù)據(jù)并不會刪除,當寫入時會直接覆蓋對應(yīng)位置的值边臼。
標記位置:當需要進行標記時哄尔,可以使用mark()
方法,即mark=position
柠并;進行讀取后岭接,可調(diào)用reset()
方法直接回到mark標記的位置富拗,即position=mark
。