NIO的效率要高於標準IO,由於NIO將最耗時的IO操做(填充和提取緩衝區)轉移會操做系統。NIO以塊爲單位傳輸數據,相比標準IO的以字節爲單位效率要高不少。spa
通道和緩衝時NIO的核心對象,每一個NIO操做都要使用到它們。操作系統
通道是對流的模擬,但與流不一樣,通道的傳輸是雙向的,一個通道能夠同時用於讀和寫。code
緩衝區是一個容器,它包含將要寫入或者剛讀出的數據。使用通道進行讀寫時都要通過緩衝區。對象
使用NIO寫入文件,能夠經過文件流獲取通道blog
FileOutputStream outputStream=new FileOutputStream(new File("/root/Desktop/test.txt")); FileChannel fileChannel=outputStream.getChannel();
下一步是建立緩衝區:ip
CharBuffer charBuffer=CharBuffer.allocate(1024); //往緩衝區存放數據 charBuffer.put("hello world"); //重設緩衝區 charBuffer.flip();
使用通道將緩衝區的內容寫入文件,通道只能操做byteBuffer,因此須要使用Charset將CharBuffer轉爲ByteBufferget
Charset charset=Charset.defaultCharset(); ByteBuffer byteBuffer=charset.encode(charBuffer); //不能肯定channel.write()能一次性寫入buffer的全部數據 //因此經過判斷是否有餘留循環寫入 while(byteBuffer.hasRemaining()){ fileChannel.write(byteBuffer); } fileChannel.close(); outputStream.close();