0

次のコードでサーバーからファイルをダウンロードしています

conn=url.openConnection();
bytesTotal=conn.getContentLength();    
in= new BufferedReader(new InputStreamReader(conn.getInputStream()));

while (true){
    byteFromStream=in.read(buffer);
    if (byteFromStream==-1) break;
    bytesLoaded=bytesLoaded+byteFromStream;
}

だから私は基本的にダウンロードされたバイト数を数え、それをbytesTotalと照合しています。

最後に、bytesTotoal が bytesLoaded と同じでない場合、ダウンロード ステータスが不完全であると言っています。

問題は 12 KB のファイル サイズです。成功率は良好ですが、ファイル サイズが大きい場合、ステータスは常に不完全です。

ダウンロード状況を確認できる他の方法はありますか。

4

1 に答える 1

0

おそらくあなたはこれに見舞われています(HttpURLConnectionドキュメントからの引用):

デフォルトでは、このHttpURLConnectionの実装は、サーバーがgzip圧縮を使用することを要求します。getContentLength()は送信されたバイト数を返すため、そのメソッドを使用してgetInputStream()から読み取ることができるバイト数を予測することはできません。代わりに、そのストリームを使い果たすまで読み取ります。read()が-1を返す場合。Gzip圧縮は、リクエストヘッダーで許容可能なエンコーディングを設定することで無効にできます。

urlConnection.setRequestProperty("Accept-Encoding", "identity");

于 2012-07-25T20:59:02.550 に答える