2012-02-10 29 views
0

我正在從服務器上下載一個zip文件,但不斷收到損壞的文件。我的連接速度很慢,並且我知道服務器會經常更新文件。這是爲什麼我得到損壞的文件?我會假設網絡協議應該足夠聰明以避免這種情況。在服務器上修改正在下載的文件時會發生什麼情況?

private void downloadFile(String urlString, String fileName) 
     throws MalformedURLException, IOException { 
    InputStream input = new URL(urlString).openConnection().getInputStream(); 
    FileOutputStream output = new FileOutputStream(fileName); 
    int bufferSize = 153600; 
    byte[] buffer = new byte[bufferSize]; 
    int totalBytesRead = 0; 
    int bytesRead = 0; 

    while ((bytesRead = input.read(buffer)) > 0) { 
     output.write(buffer, 0, bytesRead); 
     buffer = new byte[bufferSize]; 
     totalBytesRead += bytesRead; 
    } 

    output.close(); 
    input.close(); 
} 

謝謝!

+0

網絡協議與通過它發送的數據無關。這取決於服務器的實現。 – SLaks 2012-02-10 23:44:59

+1

這與「網絡協議」無關。我懷疑服務器是修改* .zip文件,而不是僅僅創建一個具有相同名稱的新文件(這不會影響當前打開的文件句柄)。如果後者不正確...是的,那麼,不要這樣做。 – 2012-02-10 23:46:53

+0

循環中的'new byte []'應該被刪除。您可以使用像'org.apache.commons.io.StreamUtils.pipe(輸入,輸出)'這樣經過驗證的庫。 – 2012-02-11 00:08:56

回答

1

這與協議無關,與您在URL另一端使用的服務器軟件無關。您的代碼只能讀取服務器向您發送的內容。 服務器代碼需要確保它在文件流式傳輸時保持對文件的寫入鎖定,否則將確保您收到(未修改的)文件的有效副本。

+0

然後這是服務器的問題。我現在感覺好多了。 :) – 2012-02-11 00:31:45

相關問題