我正在ZLIB
为嵌入式硬件压缩器编写 API,它使用 deflate 算法来压缩给定的输入流。
在继续之前,我想解释一下数据压缩率。数据压缩率定义为未压缩大小与压缩大小之间的比率。
压缩比通常大于一。这意味着压缩数据通常小于未压缩数据,这是压缩的重点。但情况并非总是如此。例如使用ZLIB
在某些 Linux 机器上生成的库和伪随机数据,压缩比大致为 0.996。这意味着 9960 字节压缩成 10000 字节。
我知道ZLIB
通过使用类型 0 块来处理这种情况,它只返回具有大约 5 字节标头的原始未压缩数据,因此它只提供 5 字节开销,最多 64KB 数据块。这是这个问题的智能解决方案,但由于某种原因,我不能在我的 API 中使用它。我必须提前提供额外的安全空间来处理这种情况。
现在,如果我知道已知的最小数据压缩率,那么我很容易计算出我必须提供的额外空间。否则为了安全起见,我必须提供超出需要的额外空间,这在嵌入式系统中可能至关重要。
在计算数据压缩率时,我不关心页眉、页脚、极小的数据集和系统特定的细节,因为我是单独处理的。我特别感兴趣的是,是否存在任何最小大小为 1K 并且可以提供比0.99
使用 deflate 算法更低的压缩比的真实数据集。在这种情况下,计算将是:
压缩率 = 未压缩大小/(使用 deflate 的压缩大小,不包括页眉、页脚和系统特定开销)
请提供反馈。任何帮助,将不胜感激。如果可以提供对此类数据集的引用,那就太好了。
编辑:
@MSalters 评论表明硬件压缩器没有正确遵循 deflate 规范,这可能是微码中的错误。