情景描述:
1.將本地數據備份成zip文件;
2.將備份的zip文件通過sftp上傳到文件服務器;
3.將文件服務器上的zip文件下載到運行服務器;
4.將下載的zip文件解壓到本地(文件大小超過50KB時報文件被損壞);
分析:
既然報文件被損壞,肯定就是因為下載文件時文件沒有讀取完全。
程序肯定不會騙人,但是當時在解決這個問題的時候,就是不願意相信是下載的問題,因為文件確實是下載下來了,而且流也關閉了,也提示下載成功了,所以就去懷疑是程序存在的問題,這是很不應該的。
問題代碼:
byte[] b = new byte[10*1024];
while(download.getInputStream().read(b,0,10240) != -1){
fos.write(b,0,10240);
}
結論:
對於影像、流等應該按照字節來讀取,而不應該一下讀取多個字節,這樣容易少讀取文件,造成文件損壞。