zip - 我们如何估计压缩文件的 “overhead”?

标签 zip compression overhead overhead-minimization

假设我们压缩例如 .txt 具有 的文件7 字节大小。压缩后转换为 .zip 文件,大小为 190 字节。

有没有办法估计或计算“开销”的大致大小?

什么因素影响开销大小?

Zlib计算开销:他们说:“……只有扩展是每 16 KB 块 5 个字节的开销(大约 0.03%),加上整个流的一次性开销 6 个字节。”

我只是把这个网站告诉它可以估计“开销”的大小。

备注 :开销是添加到数据压缩版本中的一些额外数据。

最佳答案

来自 the ZIP format ..

假设只有一个中心目录,没有注释,也没有额外的字段,开销应该类似于下面这样。 (只有添加了任何额外的元数据,开销才会增加。)

  • 每个文件(本地文件头) - 30+len(文件名)
  • 每个文件(数据描述符) - 12(到 16)
  • 每个文件(中央目录标题) - 46+len(文件名)
  • 每个存档 (EOCD) - 22

  • 所以开销,其中afn是所有文件名的平均长度,f是文件数:
      f * ((30 + afn) + 12 + (46 * afn)) + 22
    = f * (88 + 2 * afn) + 22
    

    对于不需要(文件)结构或元数据的非常小的压缩数据,这当然使 ZIP 成为一个非常糟糕的选择 - zlib另一方面,是一个非常薄的 Deflate 包装器。

    对于小负载,一个糟糕的 Deflate 实现也可能导致一个明显更大的“压缩”大小,例如臭名昭​​著的 .NET 实现..

    例子:
  • 存储 1 个文件,名称为“hello world note.txt”(len = 20),
    = 1 * (88 + 2 * 20) + 22 = 150字节开销
  • 存储 100 个文件,平均名称为 14 个字母,
    = 100 * (88 + 2 * 14) + 22 = 11622字节开销
  • 关于zip - 我们如何估计压缩文件的 “overhead”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22346487/

    相关文章:

    Powershell Zip 文件夹内容

    Android:使用 Assets 文件时出现 ZipFile、FileNotFoundException

    java - 如何使用 InputStream 从 ZIP 中读取文件?

    Python 无法处理来自 zipfile.BadZipFile 的异常

    java - 如何使用 Java 在运行时缩小不同的 javascript 文件

    c++ - 有没有办法检查缓冲区是否为 Brotli 压缩格式?

    java - Java中的时间测量开销

    python - 无法使用普通存档管理器打开 bz2 压缩(使用 python)文件

    python - 使用从循环内的代码片段中提取的函数来避免代码冗余/计算开销

    c++ - 与普通指针相比,按值传递 `unique_ptr` 是否会降低性能?