サーバーから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();
}
ありがとう!
ネットワークプロトコルは、送信されたデータとは関係ありません。それはサーバー実装までです。 – SLaks
これは "ネットワークプロトコル"とは関係ありません。そして、私はサーバが同じ名前の新しいファイルを作成するのではなく、 '.zip'ファイルを変更していることに疑いを持っています(現在開いているファイルハンドルには影響しません)。後者が間違っている場合...ええ、まあ、しないでください。 –
ループ内の 'new byte []'は削除する必要があります。 'org.apache.commons.io.StreamUtils.pipe(input、output)'のような実績のあるライブラリを使うことができます。 –