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

Другие вопросы по тегам