java輸入輸出效能提升(高效能I/O)
阿新 • • 發佈:2018-12-14
在java各種輸入輸出流效能由低到高排序:
-RandomAccessFile
-其他各種輸入輸出流
-帶快取的流:BufferedInputStream,BufferedOutputStream
-記憶體對映
記憶體對映是什麼?
在作業系統中可以利用虛擬記憶體技術獎一個檔案或者檔案的一部分,“對映”到記憶體中,然後,這個檔案就可以當做是記憶體陣列 一樣來訪問,比傳統的檔案操作要快得多。
如何使用記憶體對映:
1、從檔案中獲得一個通道(channel)
在FileInputStream、FileOutputStream、RandomAccessFile中可以呼叫getChannel()方法來獲得
2、呼叫FileChannel類的map()方法從通道中獲得MappedByteBuffer。可以指定三種模型:
FileChannel.MapMode.READ_ONLY
FileChannel.MapMode.READ_WRITE
FileChannel.MapMode.READ_PRIVATE
3、使用ByteBuffer,Buffer超類的讀寫方法讀寫資料。
示例程式碼如下:
FileInputStream in = new FileInputStream("test.text"); FileChannel channel = in.getChannel(); MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE,0,length); while(buffer.hasRemaining()) { byte b = buffer.get(); }