Java: Как правильно загружать фрагментированный контент?
Мне нужно скачать файл с 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 ответ
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
это уже метод запроса по умолчанию. Вы не должны устанавливать это.