ZIP文件格式。如何正确读取文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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'或'0xFFFFFFFF',这些值不描述其实际长度。在这种情况下,我们必须读取文件数据而不知道它的长度信息。但是怎么样?
压缩/解压缩算法描述对我来说看起来相当复杂,我打算无论如何都要使用ZLIB进行压缩。所以如果那里描述了有用的东西,那么我就错过了这一点。
有人能解释一下阅读这些文件的正确方法吗?
附:请避免建议使用npm模块。我不想只解决问题,还要了解事情是如何运作的。
注意 - 我假设您想要读取和处理zip文件,因为它来自套接字,而不是在处理之前将完整的zip文件读入内存。这两个选项都有效。
我最初忽略了compressed size
的值为'0'或'0xFFFFFFFF'的用例。前者仅存在于以流模式创建的zip文件中,后者适用于大于4Gig的zip文件。
处理它们会增加很多复杂性 - 如有必要,您可以在以后添加对它们的支持。是否需要支持0 / 0xFFFFFFFF用例取决于您要处理的zip文件的性质。
当compression method
是deflated
(8)时,使用zlib进行压缩/减压。你还需要支持compression method
stored
(0)。它用于压缩不合适的非常小的文件。
以上是关于ZIP文件格式。如何正确读取文件?的主要内容,如果未能解决你的问题,请参考以下文章