Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从AmazonS3下载大文件_Java_Amazon S3_Inputstream - Fatal编程技术网

Java 从AmazonS3下载大文件

Java 从AmazonS3下载大文件,java,amazon-s3,inputstream,Java,Amazon S3,Inputstream,我想把大文件从AmazonS3下载到RAM中。文件比RAM大。看来,我需要按零件装载。每个部分都将在端点中返回。 我也不能用硬盘,把下载的文件存储在那里。 我有InputStream对象,我正在尝试加载对象,如下所示: inputStream.skip(totalBytes); long downloadedBytesCount = 0; ByteArrayOutputStream result = new ByteArrayOutputStream(); byt

我想把大文件从AmazonS3下载到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;
inputStream.skip(总字节);
长下载字节数=0;
ByteArrayOutputStream结果=新建ByteArrayOutputStream();
字节[]缓冲区=新字节[1024];
整数长度;
做{
长度=inputStream.read(缓冲区);
结果.写入(缓冲区,0,长度);
下载字节数+=长度;
}

而(downloadedBytesCount标准S3库可以传输您想要的文件的任何部分:

(摘自)


例如,在您的程序中,您可以通过移动范围一次读取1000字节。

据我所知,inputStream不适用于此,因为它不能有多个源。
GetObjectRequest rangeObjectRequest = new GetObjectRequest(
        bucketName, key);
rangeObjectRequest.setRange(0, 10); // retrieve 1st 11 bytes.
S3Object objectPortion = s3Client.getObject(rangeObjectRequest);

InputStream objectData = objectPortion.getObjectContent();