zip文件格式以中央目录部分结尾,然后指向文件中的各个zip条目。这似乎允许zip条目发生在zip文件本身的任何地方。事实上,自解压缩zip文件就是一个很好的例子:它们以可执行文件开头,所有zip文件都在可执行字节之后发生。zip文件可以稀疏/不连续吗?
的问题是:不压缩文件格式,真正让稀疏或不连续的拉链条目?例如如果在zip条目之间有空的或者其他不明的字节?权威PK笔记和维基百科文章似乎都允许这样做。所有/最典型的压缩实用程序是否可以使用这种稀疏的zip文件?
的使用情况是这样的:我希望能够删除或zip文件中替换ZIP条目。要做到这一点,典型的minizip等图书馆希望你复制出整个zip文件,同时不复制删除或替换的zip条目,这似乎浪费和缓慢。删除或替换,你可以找出其中的未分配的字节数是直接使用这些条目中时,
岂不是更好的过度分配,说1.5倍的存储的条目,然后呢?使用1.5倍的存储空间意味着如果zip条目线性增长,重新分配也应该线性分摊。这可能与文件系统块分配类似,但可能并不复杂。
这也有助于很多基于zip的文件格式。不必在临时解压文件的某个地方(甚至在内存中)使用某个临时目录来进行编辑/更改,然后不得不将这些文件重新压缩成文件格式,这样就不需要重新压缩和重写压缩文件的某些部分文件。
是否有任何C/C++库,在那里,这样做呢?
是不是过度放置存储类型打败压缩的目的? –
压缩文件不是动态存储管理的最佳媒体。它是存档的。将数据一起压缩并完成。 –
一些数据,例如英文文本或XML,可以压缩到10倍。如果允许整个zip文件不被重写,那么仅分配超过0.5x的额外空间仍然值得。这种过度分配可以在API级别确定,以便例如已知不太可能增加尺寸的条目可以被分配足够的空间。 –