首页 > 解决方案 > 从 AWS s3 文件中读取 N 个字节不会读取 N 个字节

问题描述

我正在尝试从 AWS S3 存储桶中的文件中读取 N 个字节并将其写入缓冲区,但是当我尝试这样做时,返回的字节数不是 N,而是要少得多,并且在多次调用后它会有所不同。

我正在做的是:

public int readData(byte[] data, int doff, long offset, int length, String bucketName, String fileName) throws IOException {
    GetObjectRequest rangeObjectRequest = new GetObjectRequest(bucketName, fileName)
            .withRange(offset, length);

    S3Object objectPortion = S3_CLIENT.getObject(rangeObjectRequest);

    return objectPortion.getObjectContent().read(data, doff, length);
}

何时offset = 0length = 32752

objectPortion.getObjectContent().read(data, doff, length);

16360在大小为 32820 时返回,data这对于我想要的所有数据来说已经足够了。

为什么会这样?为什么不返回所有数据?

我要下载的文件大小约为 69kb

标签: javaamazon-web-servicesamazon-s3aws-java-sdk

解决方案


使用此代码段阅读全部内容:

try (S3ObjectInputStream is = objectPortion.getObjectContent()) {
    byte[] buf = new byte[4096];
    int read = 0;

    while ((read = is.read(buf)) >= 0) {
        // use buf / read values
    }
} catch (Exception e) {
    …
}

推荐阅读