W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
對文件執(zhí)行I/O的另一種方法是將文件的一個區(qū)域映射到物理內(nèi)存,并將其作為內(nèi)存數(shù)組。
我們可以使用MappedByteBuffer來執(zhí)行內(nèi)存映射文件I/O。
要使用內(nèi)存映射文件I/O,請為文件獲取FileChannel對象,并使用FileChannel的map()方法獲取MappedByteBuffer。
直接讀取或?qū)懭胗成涞淖止?jié)緩沖區(qū),而不是使用FileChannel對象的read()或write()方法。
當(dāng)從映射的字節(jié)緩沖區(qū)讀取時,我們從已經(jīng)映射的文件的區(qū)域讀取。
當(dāng)寫入映射的字節(jié)緩沖區(qū)時,我們寫入文件的映射區(qū)域。
要將數(shù)據(jù)立即寫入映射字節(jié)緩沖區(qū)到存儲設(shè)備,我們需要使用映射字節(jié)緩沖區(qū)的force()方法。
我們可以以只讀,讀寫或私有模式映射文件的區(qū)域。
在只讀模式下,我們只能從映射的字節(jié)緩沖區(qū)讀取。
在讀寫模式下,我們可以從映射字節(jié)緩沖區(qū)讀取以及寫入。
專用模式也稱為寫時復(fù)制模式。當(dāng)多個程序映射文件的相同區(qū)域時,所有程序共享文件的相同區(qū)域。
當(dāng)程序修改映射區(qū)域時,僅為該程序創(chuàng)建該區(qū)域的單獨副本,該副本是其私有副本。對私人副本所做的任何修改對其他程序不可見。
下面的代碼以只讀模式映射整個文件test.txt。它讀取文件并在標(biāo)準(zhǔn)輸出上顯示內(nèi)容。
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(); } }
上面的代碼生成以下結(jié)果。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: