gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:30:06 26 4
gpt4 key购买 nike

我正在尝试读取一个大的AWS S3压缩对象(gz)。我不想读取整个对象,想部分读取它,以便我可以并行处理未压缩的数据我正在使用带有“Range” header 的 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 是一种压缩格式,其中文件中的每个字节都取决于其前面的所有字节。这意味着您无法从文件中选取任意字节范围并理解它。

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

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

关于java - 使用 GetObjectRequest 和范围读取 AWS S3 GZIP 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62063974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com