java 緩存ByteBuffer

一、ByteBuffer的創建

ByteBuffer創建緩存區常用的有兩種方式:

1、使用allocate直接創建指定大小的空緩存區

ByteBuffer buffer=ByteBuffer.allocate(64);

position: 0 limit: 64 capacity 64

2、使用wrap創建一個具有內容的緩存區

ByteBuffer b2=ByteBuffer.wrap("12345678".getBytes());

position: 0 limit: 8 capacity 8

 

二、將數據存放如緩存區

ByteBuffer存放數據方法爲put(),存放數據position會進行遞增操作,position最大爲capacity。超出大小將拋出異常

 

三、從緩存區讀取數據

get(),讀取內容爲position與limit之間的內容,每次讀取position將回進行遞增操作。超出大小將拋出異常

 

注意:

clear:

清除此緩衝區。將位置設置爲 0,將限制設置爲容量,並丟棄標記

此方法不能實際清除緩衝區中的數據,但從名稱來看它似乎能夠這樣做,這樣命名是因爲它多數情況下確實是在清除數據時使用

使用clear方法只是將buffer的幾個標識位重置,並沒有將緩存中的數據清除,在使用中千萬注意

 

flip:

首先將限制設置爲當前位置,然後將位置設置爲 0。如果已定義了標記,則丟棄該標記

flip方法是將position位置設定爲limit位置,將position設置爲0

 

remaining:

返回當前位置與限制之間的元素數

 

compact:

將緩衝區的當前位置和界限之間的字節(如果有)複製到緩衝區的開始處。即將索引 p = position() 處的字節複製到索引 0 處,將索引 p + 1 處的字節複製到索引 1 處,依此類推,直到將索引 limit() - 1 處的字節複製到索引 n = limit() - 1 - p 處。然後將緩衝區的位置設置爲 n+1,並將其界限設置爲其容量。如果已定義了標記,則丟棄它

compact方法就是將position與limit之間的數據移動到0到limit() - 1 - p處,將position設置爲後面可用位置,limit設置爲初始大小

 

將緩衝區的位置設置爲複製的字節數,而不是零,以便調用此方法後可以緊接着調用另一個相對 put 方法。

從緩衝區寫入數據之後調用此方法,以防寫入不完整。例如,以下循環語句通過 buf 緩衝區將字節從一個信道複製到另一個信道:

buf.clear(); // Prepare buffer for use while (in.read(buf) >= 0 || buf.position != 0) { buf.flip(); out.write(buf); buf.compact(); // In case of partial write }

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