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

标签 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);<p></p>

<pre><code>      // byte[] downloadedFile == ???

      DataInputStream br = new DataInputStream((dCon.getInputStream()));
      br.readFully(downloadedFile);
      System.out.println(downloadedFile);
</code></pre>

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

最佳答案

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 已经是默认的请求方法。您不必设置它。

关于Java:如何正确下载分块内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5737945/

相关文章:

java - HttpClient 抛出 TruncatedChunkException 访问大块资源

ajax - 如何在客户端编写javascript来及时接收和解析 `chunked`响应?

java - Linux 中如何处理 Unsatisfied Link 错误?

java - 打包多媒体文件(视频或音频文件)

Java HTTP 服务器发送分块响应

python - Django 返回 http 早期刷新(分块响应)

http - Tomcat 有时会返回没有 HTTP header 的响应

java - 使用 Jackson 反序列化非字符串映射键

java - 使用预编译的正则表达式模式提高速度

java - 如何将java文件编译到与java文件同级的目录中?