Java檔案複製(簡單快速)文件通道#傳輸至
爪哇語複製文件介紹一個範例程式來執行此操作。
範例程式基於J2SE1.4中引入的New I/O。 java.nio.channels.FileChannel#transferTo 方法。
您可以編寫複製處理程序,而不必擔心讀取資料所需的緩衝區,這使其成為最簡單的編碼方法。
什麼是通路?
通道這個字有多種不同的使用方式。
基本上,它似乎表示其他設備之間輸入和輸出資料的傳輸路徑。java.nio.channels.FileChannel 是一個表示讀取和寫入檔案的連接的類別。
傳送到 方法可以將位元組從來源檔案傳輸到目標通道。
以下引用自JavaAPI文件。
TransferTo(長位置,長計數,WritableByteChannel 目標)
將此通道的檔案中的位元組傳輸到指定的可寫入位元組通道。
此方法比從該通道讀取資料並將其寫入目標通道的簡單循環要高效得多。許多作業系統可以將位元組直接從檔案系統快取傳輸到目標通道。此時,沒有位元組被複製。
這個驗證結果顯示如何使用普通流,
複製過程比其他 FileChannel 方法(例如使用 ByteBuffer#allocateDirect 方法)更快。
範例程式
檔案通道 srcChannel = 新
FileInputStream(srcPath).getChannel();
檔案通道 destChannel = 新
FileOutputStream(destPath).getChannel();
嘗試 {
srcChannel.transferTo(0, srcChannel.size(), destChannel);
} 最後 {
srcChannel.close();
destChannel.close();
}
}
執行
為了複製範例程式文件,我們在C盤下直接準備了一個100MB的文件「100M.txt」。
在範例程式中 C:\100M.txt 透過複製 C:\a.txt 建立一個文件。
此範例是在以下環境中執行的。
作業系統:Windows XP
CPU:速龍1.46GHz
記憶體:1GB
JRE:1.6.4
◆執行範例
/** * 執行範例 * @param args */ public static void main(String[] args) { try { copyTransfer("C:\\100M.txt", "C:\\a.txt"); } catchtxt"); } catch (IOException e) { e.printStackTrace(); } }
文件通道#傳輸至 在影印處理中使用該方法
複製一個 100MB 的檔案大約需要 3 秒鐘。此外,複製過程中的堆使用量約為 300 (KB)。
顺便提一句Java檔案複製(更改緩衝區大小)在介紹的方法中
當我們指定最有效的緩衝區大小 1000KB 時,處理時間約為 4 秒,堆使用量約為 1,300KB。
即使透過流複製檔案也可以透過調整緩衝區大小來加速,所以
可以說,複製單一文件的過程並沒有太大的區別。
然而,當連續複製大檔案或並行執行多個複製過程時,FileChannel 在處理速度和堆疊使用方面可以有效。