關於 Java NIO Buffer 使用的詳細解讀


在與NIO通道交互時使用Java NIO Buffer。 如您所知,數據從通道讀入緩衝區,並從緩衝區寫入通道。dom

緩衝區本質上是一個能夠寫入數據的內存塊,而後能夠再次讀取。 此內存塊包含在NIO Buffer對象中,該對象提供了一組方法,能夠更輕鬆地使用內存塊。spa

基本緩衝區用法

使用緩衝區讀取和寫入數據一般遵循這4個小步驟:code

  1. 寫入數據到緩衝區對象

  2. 調用 buffer.flip()ip

  3. 從緩衝區讀取數據內存

  4. 調用 buffer.clear() 或者 buffer.compact()ci

當你將數據寫入Buffer時,Buffer會跟蹤你已經寫入了多少數據。一旦你須要讀出數據,你須要調用 flip() 方法將Buffer從寫模式轉換到讀模式。在讀模式,Buffer容許你將以前寫入的數據所有讀出。get

一旦你已經讀出了全部數據,你須要清除Buffer,爲下次寫入數據作準備。能夠經過如下兩種方法來完成:clear() 和 compact()。clear() 方法清除整個Buffer,而 compact() 方法僅僅清除你已經讀出的Buffer,未讀數據會被移動到Buffer的開始位置,再次寫入的數據會追加到未讀數據的後面。it

這是一個簡單的 Buffer 使用的例子,使用的 write, flip, read 和 clear 操做:io

RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw"); FileChannel inChannel = aFile.getChannel(); //create buffer with capacity of 48 bytes ByteBuffer buf = ByteBuffer.allocate(48);int bytesRead = inChannel.read(buf); //read into buffer. while (bytesRead != -1) { buf.flip(); //make buffer ready for read while(buf.hasRemaining()){ System.out.print((char) buf.get()); // read 1 byte at a time } buf.clear(); //make buffer ready for writing bytesRead = inChannel.read(buf); } aFile.close();

Buffer的三個屬性:容量,位置和限定符

相關文章
相關標籤/搜索