Я немного разбираюсь в 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