我目前正在开发一个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模块。我不想只解决问题,也想了解事情是如何运作的。
答案 0 :(得分:0)
注意 - 我假设您要阅读并处理zip文件 它来自套接字,而不是读取完整的zip文件 处理前的内存。这两个选项都有效。
我最初忽略了compressed size
的值为'0'或'0xFFFFFFFF'的用例。前者仅存在于以流模式创建的zip文件中,后者适用于大于4Gig的zip文件。
处理它们会增加很多复杂性 - 如有必要,您可以在以后添加对它们的支持。是否需要支持0 / 0xFFFFFFFF用例取决于您要处理的zip文件的性质。
当compression method
为deflated
(8)时,请使用zlib进行压缩/解压缩。您还需要支持compression method
stored
(0)。它适用于压缩不合适的非常小的文件。