有没有人知道在C / C ++中支持面向数据包压缩的免费(非GPL),性能良好的压缩库?
对于面向数据包,我的意思是QuickLZ(GPL)的特性,其中流的多个数据包可以单独压缩和解压缩,同时跨数据包维护历史记录以实现合理的压缩。
只要CPU使用率不是很荒谬,我就倾向于使用压缩比而不是CPU使用率,但我很难找到这个功能,所以任何事情都是有意义的。
答案 0 :(得分:9)
zlib的主deflate()
函数采用flush
参数,该参数允许各种不同的刷新模式。如果您在每个数据包的末尾传递Z_SYNC_FLUSH,那么应产生所需的效果。
详细信息在zLib manual。
中说明bzip2也具有刷新功能,可能会让你做这种事情。见http://www.bzip.org/1.0.5/bzip2-manual-1.0.5.html#bzCompress
答案 1 :(得分:5)
谷歌Snappy可能是一个不错的选择,如果您需要的速度超过压缩速度,并且只是想节省适量的空间。
或者,Ilia Muraviev不久前在公共领域中放了一小段压缩代码BALZ。它适用于多种数据。
这两个都支持流刷新和独立状态变量来跨数据包执行多个并发流。
答案 2 :(得分:2)
Google的新SPDY协议使用zlib压缩单个邮件,并在连接的生命周期内维护zlib状态以实现更好的压缩。我认为没有一个独立的库可以完全处理这种行为,但有一些SPDY的开源实现可以告诉你它是如何完成的。
答案 3 :(得分:1)
Ilia Muraviev的公共领域Crush算法具有与QuickLZ类似的性能和压缩比,Crush功能更强大。算法在概念上也是相似的,Crush包含更多技巧。
之前已经提到过的BALZ算法也是由Ilia Muraviev提出的。
请参阅http://compressme.net/
答案 4 :(得分:-1)
可能是你可以使用lzma compression SDK,它由Igor Pavlov编写并置于公共领域。
由于它可以压缩流文件,并且具有内存到内存压缩,我认为可以压缩数据包流(可能会有一些更改)但不确定。