Java: Как правильно загружать фрагментированный контент? - PullRequest
3 голосов
/ 21 апреля 2011

Мне нужно скачать файл с HTTP-ответом «Transfer-Encoding: Chunked», из-за чего я не могу «getContentLength» выделить новый буфер байтов для DataInputStream. Можете ли вы посоветовать мне, как это сделать правильно?

Пример кода очень прост: <pre> 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> <pre><code> // byte[] downloadedFile == ??? DataInputStream br = new DataInputStream((dCon.getInputStream())); br.readFully(downloadedFile); System.out.println(downloadedFile);

} поймать (IOException ex) { Logger.getLogger (WhatCDWork.class.getName ()). Log (Level.SEVERE, null, ex); }

1 Ответ

0 голосов
/ 19 апреля 2018

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 уже является методом запроса по умолчанию. Вам не нужно устанавливать его.

...