假设我们压缩一个.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
字节开销