【发布时间】:2018-03-14 21:50:26
【问题描述】:
我想将大文件从 Amazon S3 下载到 RAM。文件大于 RAM 大小。看来,我需要分部分加载它。每个部分都将在端点返回。
我也不能使用硬盘驱动器来存储下载的文件。
我有InputStream 对象,我正在尝试加载如下对象:
inputStream.skip(totalBytes);
long downloadedBytesCount = 0;
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
do {
length = inputStream.read(buffer);
result.write(buffer, 0, length);
downloadedBytesCount += length;
}
while (downloadedBytesCount <= partOfFileSize && (length != -1));
totalBytes += downloadedBytesCount;
但该代码存在问题:每个新请求都会从头开始下载文件,因此最后一个下载请求(例如 20 MB)将下载所有文件(例如 1 GB)。所以,skip(long) 方法没有像我预期的那样工作。
如何从inputStream 下载文件?有什么建议吗?
【问题讨论】:
-
据我所知,
inputStream不是为此而生的,因为它不能有多个来源。
标签: java amazon-s3 inputstream