java - 从 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 = 0
和length = 32752
objectPortion.getObjectContent().read(data, doff, length);
16360
在大小为 32820 时返回,data
这对于我想要的所有数据来说已经足够了。
为什么会这样?为什么不返回所有数据?
我要下载的文件大小约为 69kb
解决方案
使用此代码段阅读全部内容:
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) {
…
}
推荐阅读
- python - Ansible 使用了错误的 Python 版本
- scala - 当具有相同名称但用于不同集合的函数产生不同的副作用时,它是否是函数语言中的库错误?
- reactjs - 如何使用 React 正确重定向到登录页面
- java - 如何在java中向数组添加值并返回?
- perl - Windows 上的 Perl - 当编码类型存储在变量中并使用 PAR::Packer 时,打开函数失败
- azure - 是否可以使用容器在 VM 上安装软件的多个实例?
- python - 如何通过点坐标列表访问数组
- c# - C# MS Access 数据库更新与动态列名
- javascript - 你能帮我处理 JSX 和 React 吗?
- angular - 在 cpanel 中的服务器上部署 Angular 项目并将其显示在网站子文件夹中