【发布时间】:2020-06-12 18:20:15
【问题描述】:
我正在尝试从 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 = 0 和length = 32752
objectPortion.getObjectContent().read(data, doff, length);
返回16360 而data 大小为 32820,足以满足我想要的所有数据。
为什么会这样?为什么不返回所有数据?
我要下载的文件大小约为 69kb
【问题讨论】:
-
InputStream.read()不像您认为的那样工作:“尝试读取多达 len 个字节,但可能会读取较小的字节数”。需要循环阅读,在本站会发现很多类似的问题。 -
反复调用
read(),将返回的数据累加,直到返回值-1,表示流结束。
标签: java amazon-web-services amazon-s3 aws-java-sdk