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

问题描述 投票:0回答:1

我目前正在开发一个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'或'0xFFFFFFFF',这些值不描述其实际长度。在这种情况下,我们必须读取文件数据而不知道它的长度信息。但是怎么样?

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

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

附:请避免建议使用npm模块。我不想只解决问题,还要了解事情是如何运作的。

zip
1个回答
0
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.