使用位元組流複製檔案過程中容易導致複製的檔案無法使用(如MP3檔案比原來大了一千多倍且音樂無法播放)很嚴重的一個bug
使用BufferedInputStream和BufferedOutputStream複製檔案,相信大家都已經遊刃有餘了,但是有一個
很嚴重的bug不容小覷,如以下程式碼:
package com.yeshide_02;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyMp3 {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
bis = new BufferedInputStream(new FileInputStream("D:\\b\\a\\任賢齊 - 花好月圓.mp3"));
bos = new BufferedOutputStream(new FileOutputStream("D:\\music\\任賢齊 - 花好月圓.mp3"));
byte[] bytes = new byte[1024];
while((len = bis.read()) != -1) {
bos.write(bytes, 0, len);
}
bis.close();
bos.close();
}
}
以上程式碼也能複製檔案,但是有一個很嚴重的問題在於使用bis讀取檔案的時候bis.read()括號裡面少寫了
一個bytes,此時程式不會報錯,但是會導致新複製的檔案比原來大1024倍並且新複製的檔案也無法被播
放器識別。出現的現象如下所述:
原因分析:
一、沒有把定義的陣列引數傳進讀取檔案的程式碼小括號中,導致寫檔案時寫了1024次,故新複製的檔案
比原來的大了1024倍。
二、計算機內部儲存的是二進位制數字,原因分析一的讀把錯誤的二進位制讀進來,導致二進位制翻譯成十進
制寫出來過程中出錯,最終導致檔案出錯無法開啟。
複製其他檔案格式的檔案也類同,最後把bytes補上括號裡面就可以正常複製檔案了。