面向数据包的无损压缩库

Packet oriented lossless compression library

本文关键字:无损压缩 数据包      更新时间:2023-10-16

>有谁知道一个免费的(非GPL),性能不错的压缩库,支持C/C++中的面向数据包的压缩?

对于面向数据包,我的意思是QuickLZ(GPL)具有的那种功能,其中流的多个数据包可以单独压缩和解压缩,同时跨数据包维护历史记录以实现合理的压缩。

只要 CPU 使用率不

荒谬,我更喜欢压缩率而不是 CPU 使用率,但我很难找到这个功能,所以任何事情都很有趣。

zlib的主要deflate()函数采用flush参数,该参数允许各种不同的刷新模式。如果在每个数据包的末尾传递Z_SYNC_FLUSH,则应产生所需的效果。

细节在 zLib 手册中进行了解释。

bzip2 也具有刷新功能,它可能可以让您做这种事情。见 http://www.bzip.org/1.0.5/bzip2-manual-1.0.5.html#bzCompress

谷歌的Snappy可能是一个不错的选择,如果你需要速度而不是压缩,并且只是想节省适量的空间。

或者,Ilia Muraviev 前段时间将一小段名为 BALZ 的压缩代码放在公共领域。 对于许多类型的数据来说,这是相当不错的。

两者都支持流刷新和独立状态变量,以跨数据包执行多个并发流。

Google的新SPDY协议使用zlib来压缩单个消息,并在连接的生命周期内保持zlib状态以实现更好的压缩。我不认为有一个独立的库可以完全处理这种行为,但是有几个SPDY的开源实现可以向您展示它是如何完成的。

Ilia Muraviev 的公共领域 Crush 算法具有与 QuickLZ 相似的性能和压缩比,Crush 更强大一些。算法在概念上也很相似,Crush包含更多的技巧。
前面已经提到的 BALZ 算法也是伊利亚·穆拉维耶夫的。
见 http://compressme.net/

也许你可以使用 lzma 压缩 SDK,它是由 Igor Pavlov 编写并放置在公共领域的。

而且由于它可以压缩流文件,并且具有内存到内存压缩功能,我认为可以压缩数据包流(可能有一些更改),但不确定。