public static void copyBytesFile(String src, String dest) throws IOException {
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(dest);
int b;
while ((b = fis.read()) != -1) {
fos.write(b);
}
fis.close();
fos.close();
}
public static void copyBytesFile2(String src, String dest) throws IOException {
FileInputStream fis = new FileInputStream(src);
FileOutputStream fos = new FileOutputStream(dest);
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len); // 關鍵:只寫入實際讀取的長度
}
fis.close();
fos.close();
}
複製 a.mp3 檔案:


核心差異: 方式一每讀寫一個位元組就跨越使用者/核心空間,系統呼叫開銷極大;方式二批次讀寫,大幅減少系統呼叫次數。實務上必須使用緩衝(或
BufferedInputStream/OutputStream)。

王雨、程志鴻、郭強