使用 GetObjectRequest 和范围读取 AWS S3 GZIP 对象



我正在尝试读取一个大的AWS S3压缩对象(gz(。我不想读取整个对象,而是要分部分读取,以便可以并行处理未压缩的数据 我正在使用带有"范围"标头的GetObjectRequest读取它,我正在设置字节范围。 但是,当我给出介于 (100,200( 之间的字节范围时,它会失败并显示"不是 GZIP 格式" 失败的原因是,AWS请求返回一个流,但是当我将其解析为GZIPInputStream时,它失败了,因为"GZIPInputStream"期望第一个字节(GZIP_MAGIC = 0x8b1f(确认它是gzip,这在流中不存在。

GetObjectRequest rangeObjectRequest = new GetObjectRequest(<<Bucket>>, <<Key>>).withRange(100, 200);
S3Object object = s3Client.getObject(rangeObjectRequest);
S3ObjectInputStream rawData = object.getObjectContent();
InputStream data =  new GZIPInputStream(rawData);

谁能指导正确的方法?

GZIP 是一种压缩格式,其中文件中的每个字节都依赖于它前面的所有字节。这意味着您无法从文件中选择一个任意字节范围并理解它。

如果需要读取字节范围,则需要将其存储为未压缩的。

您还可以创建自己的文件存储格式,将文件块存储为单独压缩的块。您可以使用 ZIP 格式执行此操作,其中存档中的每个文件代表一个特定的块大小。但是您需要实现自己的 ZIP 目录读取器才能完成这项工作。

相关内容

  • 没有找到相关文章

最新更新