NIO學習:使用Channel、Buffer寫入文件

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();
相關文章
相關標籤/搜索