2012-02-10 8 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

+1

これは "ネットワークプロトコル"とは関係ありません。そして、私はサーバが同じ名前の新しいファイルを作成するのではなく、 '.zip'ファイルを変更していることに疑いを持っています(現在開いているファイルハンドルには影響しません)。後者が間違っている場合...ええ、まあ、しないでください。 –

+0

ループ内の 'new byte []'は削除する必要があります。 'org.apache.commons.io.StreamUtils.pipe(input、output)'のような実績のあるライブラリを使うことができます。 –

答えて

1

これはプロトコルとは関係なく、URLの反対側で使用しているサーバーソフトウェアとは関係ありません。あなたのコードはサーバーがあなたに送るものだけを読むことができます。 サーバコードでは、ファイルのストリーミング中に書き込みロックを維持するか、そうでなければ(変更されていない)ファイルの有効なコピーを確実に受け取るようにする必要があります。

+0

それはサーバーの問題です。気分がよくなりました。 :) –

関連する問題