1

Я немного разбираюсь в API Apache HC. Я пытаюсь загрузить огромный файл с сервера (10 GB) on cloud environment, а затем я должен загрузить его на Amazon S3.Как ChunkedInputStream работает внутри с Apache HttpClient 4.x?

Поскольку файл слишком большой, он имеет transfer encoding as chunked и gzip format. Cloud env не имеет достаточного дискового пространства для хранения этого файла в виде временного файла, и такой файл не может быть размещен в памяти.

В основном у меня есть 2 интерфейса,

ResourceDownloader { 
    InputStream download(AbstractChannel channel); 
} 

ResourceUploader{ 
    void upload(AbstractChannel channel, InputStream inputStream); 
} 

Часть1:

При использовании Apache HTTPClient LIB, я вижу ответ возврата HTTP со следующей структурой,

ResponseEntityProxy contains >> { 
- BasicHttpEntity [WrappedEntity] 
- content as ChunkeInputStream 
} 

Соответствует ли этот ответ среднее целое 10 ГБ будет доступно в буфере памяти на стороне клиента после завершения вызова client.execute (getMethod)?

Или это похоже, как только я вызываю вызов, чтобы читать, как показано ниже, он будет получать куски с сервера? [В реальном случае, диск не будет доступен, но ниже только для демо]

try { 
     FileOutputStream fos = (FileOutputStream) outputStream; 

     if(inputStream instanceof GZIPInputStream) { 
      byte[] buffer = new byte[1024]; 
      int len; 
      while((len = inputStream.read(buffer)) != -1){ 
       fos.write(buffer, 0, len); 
      } 
      //close resources 
      fos.close(); 
      inputStream.close(); 
     } 

    } catch (IOException e) { 
     logger.error("Exception occurred while processing file on disk", e); 
    } 

Ч.2:

Я знаю нескольких загрузки части, если у меня есть длина содержимого или полный файл доступным, но в случае потокового входного потока, как мы должны загрузить его на Amazon S3?

Спасибо, Dharam

ответ

0

HttpClient всегда потоки запросов и ответов объектов, если специально не предписывается иное.