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 回答