2

Web サーバーからファイルをチャンク形式で取得するプログラムを作成しようとしました。HTTP 3.0 API で ChunkedInputStream クラスを使用しようとしています。コードを実行すると、「チャックされた入力ストリームが予期せず終了しました」というエラーが表示されます。私は何を間違っていますか?これが私のコードです:

    HttpClient client = new DefaultHttpClient();
    HttpGet getRequest = new HttpGet(location);
    HttpResponse response = client.execute(getRequest);
    InputStream in = response.getEntity().getContent();

    ChunkedInputStream cis = new ChunkedInputStream(in);
    FileOutputStream fos = new FileOutputStream(new ile("session_"+sessionID));
    while(cis.read() != -1 )
    {
        fos.write(cis.read());
    }
    in.close();
    cis.close();
    fos.close();
4

2 に答える 2

3

axtavtが示唆するように、ChunkedInputStreamを使用しないでください。ただし、別の問題があります。奇数バイトをすべてスキップしています。データが偶数バイトの場合、EOSを意味する-1を書き込んでから、別の読み取りを実行します。ストリームをコピーする正しい方法:

byte[] buffer = new byte[8192];
int count;
while ((count = in.read(buffer)) > 0)
{
  out.write(buffer, 0, count);
}
于 2012-06-25T22:14:32.997 に答える
2

ChunkedInputStreamこの場合、使用する必要がありますか?

HttpClientチャンクされたエンコーディングを内部で処理する必要があると思うので、response.getEntity().getContent()すでにデコードされたストリームを返します。

于 2012-06-25T19:02:26.637 に答える