Java:如何正确下载分块内容?

时间:2011-04-20 23:52:54

标签: java chunked-encoding chunked http-chunked

我必须下载哪个HTTP响应是“Transfer-Encoding:Chunked”的文件,因为我不能“getContentLength”为DataInputStream分配新的字节缓冲区。 你能建议我如何正确地做到这一点吗?

代码示例非常简单:

try
{
       dCon = (HttpURLConnection) new URL(torrentFileDownloadLink.absUrl("href")).openConnection();
       dCon.setRequestProperty("Cookie", "session=" + cookies.get("session"));
       dCon.setInstanceFollowRedirects(false);
       dCon.setRequestMethod("GET");
       dCon.setConnectTimeout(120000);
       dCon.setReadTimeout(120000);

      // byte[] downloadedFile == ???

      DataInputStream br = new DataInputStream((dCon.getInputStream()));
      br.readFully(downloadedFile);
      System.out.println(downloadedFile);

} catch(IOException ex) { Logger.getLogger(WhatCDWork.class.getName()).log(Level.SEVERE, null, ex); }

1 个答案:

答案 0 :(得分:0)

HttpURLConnection会照顾你的所有去块。只需复制字节直到流结束:

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

其中out是您要将数据保存到的OutputStream。如果你真的需要它在内存中,甚至可以是ByteArrayOutputStream,虽然这不可取,因为并非一切都适合内存。

NB GET已经是默认的请求方法。你不必设置它。