BufferedInputStream示例
BufferedOutputStream示例
BufferedReader實例
BufferedWriter示例
ByteArrayInputStream示例
Java ByteArrayOutputStream示例
Java CharArrayReader示例
Java CharArrayWriter示例
Java Console類示例
Java DataInputStream類型
Java DataOutputStream實例
Java Externalizable實例
Java File實例
FileDescriptor示例
Java FileInputStream示例
FileOutputStream示例
Java FilePermission示例
Java FileReader示例
Java FileWriter示例
Java FilterInputStream示例
Java FilterOutputStream示例
Java FilterReader示例
Java FilterWriter示例
Java內存通道
對文件執行I/O
的另一種方法是將文件的一個區域映射到物理內存,並將其作爲內存數組。可以使用MappedByteBuffer
來執行內存映射文件I/O
。
要使用內存映射文件I/O
,請爲文件獲取FileChannel
對象,並使用FileChannel
的map()
方法獲取MappedByteBuffer
。
直接讀取或寫入映射的字節緩衝區,而不是使用FileChannel
對象的read()
或write()
方法。
當從映射的字節緩衝區讀取時,從已經映射的文件區域讀取。當寫入映射的字節緩衝區時,寫入文件映射區域。
要將數據立即寫入映射字節緩衝區到存儲設備,需要使用映射字節緩衝區的force()
方法。可以以只讀,讀寫或私有模式映射文件的區域。
在只讀模式下,只能從映射的字節緩衝區讀取。在讀寫模式下,可以從映射字節緩衝區讀取以及寫入。
專用模式也稱爲寫時複製模式。當多個程序映射文件的相同區域時,所有程序共享文件的相同區域。
當程序修改映射區域時,僅爲該程序創建該區域的單獨副本,該副本是其私有副本。對私人副本所做的任何修改對其他程序不可見。
示例
下面的代碼以只讀模式映射整個文件test.txt
。 它讀取文件並在標準輸出上顯示內容。
import java.io.FileInputStream;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
public class Main {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("test.txt");
FileChannel fc = fis.getChannel();
long startRegion = 0;
long endRegion = fc.size();
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_ONLY, startRegion, endRegion);
while (mbb.hasRemaining()) {
System.out.print((char) mbb.get());
}
fis.close();
}
}
上面的代碼生成以下結果。
test
test
test
test