我们如何估计压缩文件的“开销”?



假设我们压缩一个.txt文件,该文件的大小为7字节。压缩后转换为.zip文件,大小为190字节。

是否有一种方法来估计或计算"开销"的大致大小?

什么因素影响开销大小?

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

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

注意: 开销是添加到数据压缩版本中的额外数据量。

从ZIP格式…

假设只有一个中心目录,并且没有注释和没有额外字段,那么开销应该类似于以下内容。(开销只会在添加任何额外的元数据时增加。)

  • 每个文件(本地文件头)- 30+len(filename)
  • 每个文件(数据描述符)- 12(到16)
  • 每个文件(中央目录头)- 46+len(filename)
  • 每个档案(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字节开销

相关内容

  • 没有找到相关文章

最新更新