Amazon S3からRAMに大きなファイルをダウンロードしたいと思います。ファイルはRAMサイズより大きくなります。私は部品でそれをロードする必要があるようだ。各部分はエンドポイントに戻るでしょう。 また、そこにダウンロードしたファイルを保存するためにハードドライブを使用することはできません。 私はInputStream
オブジェクトを持っていると私は以下のようにオブジェクトをロードしようとしています:Amazon S3から大きなファイルをダウンロード
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メガバイトのために)ダウンロードするために始めるので、最後のリクエストからダウンロードしたファイルを起動しますすべてのファイル(たとえば1 GB)をダウンロードします。だから、方法skip(long)
は期待どおりに動作しません。
inputStream
からファイルをダウンロードするにはどうすればよいですか?助言がありますか?
私の知る限り、inputStreamは複数のソースを持つことができないため、このために作られていません。 –