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