java ByteBuffer學習筆記

沒有NIO以前,數據只能以流的形式來傳輸的,而在操做系統中,底層數據都是以塊的形式讀寫,爲了提升java io的性能,更好的利用操做系統的特性,於是提出了NIO。 html

Java NIO中得定義了數據容器做爲緩衝區,即Buffer,在通道Channel傳輸數據都須要用到緩衝區。 java

Buffer四個要點: 性能

  1. 位置
  2. 限制
  3. 容量
  4. 標記
他們之間的關係爲:

0<=標記 <=位置 <=限制 <=容量 spa

標記能夠調用API設置,默認是NULL 操作系統

位置的開始值爲0,再讀寫數據時移動到下一位,當時不能超過限制不然出現異常 code

限制默認爲容量大小,在讀數據時,爲了讀取到有效的數據(上次寫數據時,沒有寫到容量處,有空餘),通常在讀取以前須要設置一個限制(設置爲上次讀數據的位置處),通常是調用flip()方法 htm

容量爲分配的Buffer的固定大小 ip

Buffer二個重要的API: it

  • clear() 使緩衝區爲一系列新的通道讀取或相對放置 操做作好準備:它將限制設置爲容量大小,將位置設置爲 0。
  • flip() 使緩衝區爲一系列新的通道寫入或相對獲取 操做作好準備:它將限制設置爲當前位置,而後將位置設置爲 0。

建立一個ByteBuffer io

//分配一個新的字節緩衝區
ByteBuffer byteBuffer =  ByteBuffer.allocate(1024);

循環語句經過buf緩衝區將字節從一個信道複製到另外一個信道:

buf.clear();          //將位置設置爲 0,將限制設置爲容量
  while (in.read(buf) >= 0 || buf.position != 0) {
     buf.flip();       //將限制設置爲當前位置,而後將位置設置爲 0
     out.write(buf);
     buf.compact();    //以防寫入不完整
 }

參考資料:

http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html

相關文章
相關標籤/搜索