面向数据包的无损压缩库
Packet oriented lossless compression library
>有谁知道一个免费的(非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 编写并放置在公共领域的。
而且由于它可以压缩流文件,并且具有内存到内存压缩功能,我认为可以压缩数据包流(可能有一些更改),但不确定。
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 发送固定大小的 UDP 数据包
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 在 c++ 中解析数据包数据的最佳方法是什么?
- 接受函数在发送数据包时等待
- 如何在 omnet++ 中发送自定义数据包?
- 数据包访问实践
- 在C++中创建一个简单的数据包路由器,如何跟踪"客户端"?
- 德拉吉诺 LG01-S 收到异常数据包并停止工作
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 使用C++将UDP数据包存储在Structure中
- FFmpeg av_read_frame从音频流返回数据包
- 为什么操作系统正在更改我的数据包的指定传出端口
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- recvfrom 只收到几个数据包,之后它进入等待状态
- 如何调试由 C++ 编写的 npm 数据包
- 如何在INET的应用层中发送广播数据包
- C++ 将字符串数据包转换为 iphdr语言 - 字符串数据包的格式应该是什么?
- 面向数据包的无损压缩库