我曾尝试编写一个以分块格式从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();
答案 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()
会返回已解码的流。