沒有NIO以前,數據只能以流的形式來傳輸的,而在操做系統中,底層數據都是以塊的形式讀寫,爲了提升java io的性能,更好的利用操做系統的特性,於是提出了NIO。 html
Java NIO中得定義了數據容器做爲緩衝區,即Buffer,在通道Channel傳輸數據都須要用到緩衝區。 java
Buffer四個要點: 性能
0<=標記 <=位置 <=限制 <=容量 spa
標記能夠調用API設置,默認是NULL 操作系統
位置的開始值爲0,再讀寫數據時移動到下一位,當時不能超過限制不然出現異常 code
限制默認爲容量大小,在讀數據時,爲了讀取到有效的數據(上次寫數據時,沒有寫到容量處,有空餘),通常在讀取以前須要設置一個限制(設置爲上次讀數據的位置處),通常是調用flip()方法 htm
容量爲分配的Buffer的固定大小 ip
Buffer二個重要的API: it
建立一個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