下面的代碼能夠實現以字節爲單位複製文件的功能,適合複製非文本類型的文件。
import java.io.FileInputStream;java
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;數組
/**緩存
}code
可是,這段代碼在複製如mp3等大文件時,運行效率很低,即運行時間長。運行時間見圖1。
圖片1:
對象
爲了解決這個問題,可將數據讀取由1次讀一個字節改成一次讀1024個字節甚至更大,可大大提高傳輸效率。
public static void copyBytesFile2(String sFileName, String dFileName)
throws IOException {
// 建立文件輸入流對象和文件輸出流對象
// 文件輸入流對象與源文件關聯
FileInputStream fis = new FileInputStream(sFileName);
// 文件輸出流對象與目標文件關聯
FileOutputStream fos = new FileOutputStream(dFileName);
// 循環讀取文件內容,同時寫出到外部文件
byte[] b = new byte[1024 * 10000];
/
從關聯的源文件中讀多個字節,保存到字節數組b中, 若是到達文件末,返回值爲-1,不然返回值爲實際讀到的字節數。
*/
int read = fis.read(b);
while (read != -1) {
fos.write(b);// 向關聯的目標文件寫出當前字節數組中的字節數據
read = fis.read(b);
}
// 清空緩存,關閉流對象
fis.close();
fos.close();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
long t1, t2;
t1 = System.currentTimeMillis();
try {
CopyFile.copyBytesFile2("a.mp3", "temp.mp3");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t2 = System.currentTimeMillis();
System.out.println("用時:" + (t2 - t1));blog
}
}
運行時間如圖2。
圖2:
圖片