【问题标题】:Multi-algorithm compression library for CC的多算法压缩库
【发布时间】:2013-04-27 06:47:26
【问题描述】:

我希望我的程序能够使用 zlib、lzma、lzo 和 bzip2 压缩算法。

是否有任何 C 压缩库可以简化使用多种算法(如 libmcrypt 支持多种加密模式和算法)?

期待这样的事情:

struct compressor c;
universal_compressor_init(&c, "lzma", 7 /* compression level */);
universal_compressor_compress(&c, inputbuf, inputsize, outputbuf, &outputsize);
universal_compressor_save_state(&c, statebuf, &statesize);

注意:这不是关于 zip/rar/7z/tar/cpio 和其他存档格式,而是关于原始缓冲区的压缩。想想压缩网络协议或随机访问压缩块设备(如cloop)。

【问题讨论】:

    标签: c lossless-compression


    【解决方案1】:

    LibArchive 满足您的要求。

    来自简介:

    libarchive 库功能:

    • 支持多种存档和压缩格式。
    • 强大的自动格式检测,包括归档/压缩组合,例如 tar.gz。 ...

    编辑:对于处理原始流(至少在它们从 libarchive 中拆分 libfilter 之前),请考虑使用 Boost::iostreamslibbu++(刚刚在 GitHub 上找到)

    【讨论】:

    • 适合很多小的独立无头压缩缓冲区吗?
    • 看起来 libarchive 的主要目标是将档案作为文件包处理,而不是作为嵌入某些协议中的压缩。
    • 我可以在 libarchive 的公共 API 中使用 libarchive 过滤器(没有其余的 libarchive)吗?
    • 不幸的是,不是:该功能计划在未来发布。更新了答案。
    • 如果我理解您将要做什么,您可能会发现 squashfs 在块压缩方面非常有趣。
    【解决方案2】:

    我推荐 7-zip (http://www.7-zip.org/sdk.html)。我还没有找到任何东西可以在压缩速度和大小方面击败它。

    【讨论】:

    • 我想压缩大文件,在里面保留随机访问。所以我想压缩小块并存储索引。 7-zip 是否提供了一个 API 来高效地完成它?
    • 是的,这是我的需求之一(从大型档案中快速提取单个文件)。您可以在 7-zip 论坛上发帖了解更多信息:sourceforge.net/p/sevenzip/discussion/45797
    • 它真的能处理 13107200 个 4096 字节的小文件吗?
    • 好问题 - 我敢肯定只需要几行代码就能找到答案。
    • 7-zip 的主要算法 (lzma) 实际上是有问题的。有问题的库的目的是能够轻松切换算法。
    猜你喜欢
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多