ZIP文件格式。如何正确读取文件?

时间:2017-12-28 14:53:45

标签: zip

我目前正在开发一个Node.js项目。我希望能够读取,修改和编写ZIP文件而不将其保存到FS中(我们通过TCP接收它并在修改后将其发回),到目前为止看起来可能是简单的ZIP文件结构。目前我提到this documentation

因此ZIP文件结构简单:

File header 1
File data 1
File data descriptor 1

File header 2
File data 2
File data descriptor 2

...

[other not important yet]

首先我们需要读取包含字段compressed size的文件标题,这可能是阅读file data 1长度的完美方式。但事实并非如此。该字段可能包含' 0' 0或者' 0xFFFFFFFF',这些值不能描述它的实际长度。在这种情况下,我们必须读取文件数据而不知道它的长度信息。但是如何?..

压缩/解压缩算法描述对我来说看起来相当复杂,我打算无论如何都要使用ZLIB进行压缩。因此,如果那里描述了有用的东西,那么我就错过了这一点。

有人可以解释一下阅读这些文件的正确方法吗?

P.S。请避免建议使用npm模块。我不想只解决问题,也想了解事情是如何运作的。

1 个答案:

答案 0 :(得分:0)

  

注意 - 我假设您要阅读并处理zip文件   它来自套接字,而不是读取完整的zip文件   处理前的内存。这两个选项都有效。

我最初忽略了compressed size的值为'0'或'0xFFFFFFFF'的用例。前者仅存在于以流模式创建的zip文件中,后者适用于大于4Gig的zip文件。

处理它们会增加很多复杂性 - 如有必要,您可以在以后添加对它们的支持。是否需要支持0 / 0xFFFFFFFF用例取决于您要处理的zip文件的性质。

compression methoddeflated(8)时,请使用zlib进行压缩/解压缩。您还需要支持compression method stored(0)。它适用于压缩不合适的非常小的文件。