C语言多算法压缩库

8
我希望我的程序能够使用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)的随机访问。
2个回答

3

LibArchive 可以满足您的需求。

介绍中提到:

libarchive 库的特点:

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

编辑:如果需要处理原始流(至少在将 libfilter 从 libarchive 中分离之前),可以考虑使用 Boost::iostreamslibbu++(刚在 GitHub 上发现)。


适用于许多小的独立无头压缩缓冲区吗? - Vi.
看起来libarchive的主要目标是将存档作为文件束处理,而不是作为嵌入某些协议的压缩。 - Vi.
我能否使用libarchive的过滤器(而不是整个libarchive)与libarchive的公共API一起使用? - Vi.
很遗憾,该功能计划在未来的版本中发布。已更新回答。 - Stefano Sanfilippo
我们在聊天中继续这个讨论 - Vi.
显示剩余3条评论

0

我想压缩大文件并保留其中的随机访问。因此,我想压缩小块并存储索引。7-zip是否提供高效执行此操作的API? - Vi.
是的,那是我有的需求之一(从大型存档中快速提取单个文件)。你可以在7-zip论坛上发布更多信息:http://sourceforge.net/p/sevenzip/discussion/45797 - Scott Jones
它真的能很好地处理13107200个每个4096字节的小文件吗? - Vi.
好问题 - 我相信只需要几行代码就能找到答案。 - Scott Jones
7-zip的主要算法(lzma)实际上在问题中列出。所讨论的库的目的是能够轻松切换算法。 - Vi.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接