我正在从 API 请求一个 zip 文件,并尝试按字节范围检索它(设置 Range 标头),然后分别解析每个部分。在阅读了一些关于 gzip 和 zip 压缩的信息后,我很难弄清楚:
我可以从 zip 文件中解析一部分吗?
我知道 gzip 文件通常会压缩单个文件,因此您可以将其解压缩并分段解析,但是 zip 文件呢?
zip 文件在文件末尾有一个目录(除了每个项目之前的基本信息相同),其中列出了每个项目的文件名和在 zip 文件中的位置。通常每个项目都使用 deflate 进行压缩,这与 gzip 使用的算法相同(但 gzip 在 deflate 流之前有一个自定义标头)。
所以是的,为一个 zip 文件中的一个项目提取压缩字节流是完全可行的,并在前面加上一个捏造的 gzip 标头(IIRC 14 字节是此标头的最小大小),以允许您通过将其传递给该文件来仅解压缩该文件枪口。
如果您想自己编写代码来为泄气的流充气,我建议您制定不同的计划。我做到了,真的不好玩。一定要使用zlib,不要尝试重新实现解压。