【问题标题】:Is there a compression format that allows update content inplace?是否有允许就地更新内容的压缩格式?
【发布时间】:2019-08-26 19:13:15
【问题描述】:

zip 格式不允许就地更新。要替换 zip 中的文件,必须复制原始 zip 文件,并将这些文件原封不动地复制到新的 zip 文件中。

其他的,比如 tar.gz,也不允许就地替换,

是否存在允许本地就地更新的压缩格式?

我不确定 7z。有人熟悉吗?

【问题讨论】:

  • 您使用哪种操作系统?
  • Linux 或 Mac 操作系统。
  • 我不确定这是否适合本网站的问题。 StackOverflow 是关于代码的。
  • 那换一种说法。允许哪些代码就地更改存档?
  • 嗯...这个网站纯粹涉及源代码、错误、调用等问题...您是在询问软件或软件的功能推荐。这种类型的问题应该在这里问:softwarerecs.stackexchange.com 或在某些情况下在这里:stackexchange.com

标签: zip compression gzip tar 7zip


【解决方案1】:

这可能没有在任何压缩格式中实现,当然在压缩文件系统中除外。

原因很简单:数据不能以固定的速率压缩,所以通过改变输入数据,输出数据的大小可以改变。例如,如果您首先有一个 1000 个零字节的字符串作为输入,则可以将它们完美地压缩(例如,使用 gzip 压缩成 29 个字节)。如果您现在将它们更改为 1000 字节的随机内容(白噪声),那么它们根本无法被压缩(gzip 通常会产生 1023 字节的输出,因为添加了一些标头字节)。

如果我们谈论压缩和打包(如 ZIP、TGZ 或类似)的组合,这意味着在文件中间插入更多字节,因此,将所有字节移到此位置之后。另一方面,这种转移操作并不是当前操作系统所准备的。 (至少 Unix 和 Windows 都不允许这样做。)结果将是复制该点之后的所有内容以实现转移。这效率不高,因此不可行。

可以设计一种允许插入到文件末尾的文件格式,但我从未听说过这样的事情。

如果您使用压缩文件系统,您当然可以更改其中的任何文件,无论其位置如何。并且要将其作为单个文件发送,您可以发送存储它的块设备的内容。

查看此任务的 fusecompress 文件系统。我认为该项目已被放弃,但也许您可以在某处找到工作快照。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多