我正在编写存储数据的项目,所以我需要压缩它。我试过 zlib 但它是我项目的瓶颈。所以也许有更快的解决方案。我不需要很大的压缩比,但我正在寻找真正快速的压缩。除了 zlib 之外,是否还有其他数据压缩库,它们是真正免费的并且可以在专有软件中使用(我正在从事的项目,不是基于 GPL 的)。我的项目在 C++ 上,我需要压缩 char* 文本数组。
11 回答
一种非常快速的压缩算法是LZO。该网站上的基准测试表明,减压的速度与memcpy()
.
LZO 的免费版本是 GPL 许可的,但LZO Professional中也有商业版本的库。另外,从文档中:
不愿接受 GNU 通用公共许可证的商业和其他应用程序的特殊许可证可通过联系作者获得。
我认为 7zip 是公共领域。LZMA 压缩。
另一个答案已经提到LZO
,这是默认的“我需要更快(解)压缩”的解决方案。
我发现的另一个是liblzf。LZO
在速度和压缩率方面非常接近。LZO
拥有 GPL 许可证,而liblzf
拥有 BSD 许可证(恕我直言,这是一个优势)。
Google 发布了“Snappy”,这是一个 BSD 许可的压缩库,用 C++ 编写(包括 C 中的绑定)。
http://code.google.com/p/snappy/
根据源中的自述文件:
在我们的测试中,Snappy 通常比同类算法(例如 LZO、LZF、FastLZ、QuickLZ 等)更快,同时实现相当的压缩比。
由于 LZO 许可的问题,我们决定评估这个线程中的建议,这些建议是 BSD/MIT 许可的,与 LZO 非常相似(为了更容易集成)并且适合在低端硬件上运行(想想便宜的 32 位 MCU,而不是 Pentium2) .
我们测试了 LZ4、LZF、FastLZ 并将结果与 LZO 进行了比较。我们压缩了图形数据。我无法发布确切的结果,但LZ4 比其他人快得多(在 7 次测试中获胜,与第二名相比有高达 40% 的优势),同时匹配大小(LZF-LZ4-LZO 以 5-2-2 获胜,利润率很小)。
我第二个lz4。它有一个 BSD 许可证。
英特尔集成性能基元具有实现各种压缩的示例:
- bzip2 兼容库 ipp_bzip2 示例演示了如何使用英特尔 IPP 数据压缩域函数来实现 bzip2/libbzip2(用于无损、块排序数据压缩和 bzip 线程优化的新改进的程序和库
- GZIP 兼容库 IPP_GZIP 示例说明了使用英特尔 IPP 数据压缩域 API 实施有效的无损数据压缩解决方案的方法。此外,此示例还展示了使用 OpenMP 和其他方法并行化应用程序以在多核环境中获得高级优势的方法。
- zlib 兼容库(新!) 此代码示例说明如何使用英特尔 IPP 中优化的 LZ77 和 Huffman 编码函数构建与 zlib 兼容的数据压缩库。
- 通用数据压缩示例 说明如何使用英特尔 IPP 数据压缩域提供的功能。包括 Huffman 编码/解码、RLE 编码/解码、MoveToFront (MTF)、Burrows-Wheeler 变换 (BWT)、通用区间变换 (GIT) 和 Lempel-Ziv-Storer-Szymanski (LZSS) 函数。
IPP 不是免费的,但速度非常快。它支持 Windows 和 Linux。
是的,bzip2 有 BSD 许可证。