分块输入流意外结束

时间:2012-06-25 18:46:59

标签: java httpclient chunked

我曾尝试编写一个以分块格式从Web服务器获取文件的程序。我试图在HTTP 3.0 API中使用ChunkedInputStream类。当我运行代码时,它给了我“意外结束的chucked输入流”错误。我究竟做错了什么?这是我的代码:

    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();

2 个答案:

答案 0 :(得分:2)

不要使用ChunkedInputStream,正如axtavt所说,但还有另一个问题。您正在跳过每个奇数编号的字节。如果数据是偶数个字节,您将写入-1表示EOS,然后再执行另一次读取。复制流的正确方法:

byte[] buffer = new byte[8192];
int count;
while ((count = in.read(buffer)) > 0)
{
  out.write(buffer, 0, count);
}

答案 1 :(得分:1)

在这种情况下,您确定需要使用ChunkedInputStream吗?

我认为HttpClient应该在内部处理chuncked编码,因此response.getEntity().getContent()会返回已解码的流。