Java檔案複製(更改緩衝區大小)
爪哇語 java.io.InputStream,,java.io.OutputStream 在
介紹使用輸入/輸出流執行複製處理的範例程式。
在使用流的複製處理中,透過增加讀取緩衝區大小,即使是大檔案也可以相對快速地複製。
在範例程式中,可以使用參數指定資料讀取緩衝區大小。
指定的讀取緩衝區是在JavaVM堆中保護的,所以設定太大會導致效率低下。因此,我們在複製檔案時也會檢查有效的資料讀取緩衝區大小。
範例程式
/**
* 將資料從輸入流寫入輸出流。
*複製過程完成後,輸入/輸出流將關閉。
* 輸入流中的@param
* @param os 輸出流
* @param bufferSize 資料讀取緩衝區大小 (KB)。
* @throws IOException 如果發生某些輸入/輸出處理異常
*/
公共靜態無效copyStream(輸入流,輸出流作業系統,
int bufferSize) 拋出 IOException {
int len = -1;
byte[] b = 新位元組[bufferSize * 1024];
嘗試 {
while ((len = in.read(b, 0, b.length)) != -1) {
os.write(b, 0, len);
}
os.flush();
} 最後 {
如果(在!=空){
嘗試 {
附寄();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
嘗試 {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
執行
為了複製範例程式文件,我們在C盤下直接準備了一個100MB的文件「100M.txt」。在範例程式中, C:\100M.txt ,以緩衝區大小1000KB為單位讀取資料。 C:\a.txt 複製到。
此範例是在以下環境中執行的。
作業系統:Windows XP
CPU:速龍1.46GHz
記憶體:1GB
JRE:1.6.4
◆執行範例
/** * 執行範例 * @param args */ public static void main(String[] args) { try { copyStream("C:\\100M.txt", "C:\\a.txt",1000); } catch (IOException e) { e.printStackTrace(); } }
更改緩衝區大小
若要在複製檔案時檢查有效的資料讀取緩衝區大小,請使用 copyStream 的第三個參數作為
以下總結了以 1KB、100KB、1000KB 和 10000KB 為單位的類似複製處理的結果。
雖然僅從上面的結果不能得出結論,但如果以1000KB為單位指定資料讀取緩衝區大小,
結果表明,在複製處理期間,它在堆使用和處理時間方面是高效的。
即使檔案大小增加(約 1GB),也能獲得類似的結果。
另一方面,當複製小檔案(大約1MB或更小)時,增加緩衝區大小會很浪費,所以我認為最好指定100KB左右。
使用 FileChannel 獲得更快的速度
java.io.InputStream,,java.io.OutputStream
複製處理對於理解輸入/輸出流很重要,但是
J2SE1.4 中引入的新 I/O java.nio.channels.FileChannel#transferTo
透過使用此方法,您可以更有效地複製文件。
接下來我將向您展示如何使用FileChannel輕鬆快速地複製文件。
⇒ Java檔案複製(簡單快速)