c++ - 带有检查点的开源压缩算法

标签 c++ algorithm open-source compression gzip

<分区>

我正在使用 gcc 4.5.0 和 msvc8/9 使用 C++。

我希望能够压缩一个文件 (10 Gb),然后使用我的应用程序打开该文件。

但是,文件内容如此,我不必每次使用它们时都需要其中的所有内容。

因此,例如,有一次我打开这些压缩文件之一,并决定我要在不加载文件的情况下搜索文件的 95%。使用像 gzip 这样的压缩算法,这是不可能的:我必须先解压文件的前 95%,然后才能解压后 5%。

So, are they any libraries similar to gzip, that are open source 
and available for commercial use, that have built in check points, 
to re-sync the decompression stream?

我认为也许无损音频编解码器可以解决问题。我知道其中一些算法有检查点,因此您可以搜索音乐文件,而不必等待音乐文件的全部内容解压缩。使用音频编解码器进行数据解/压缩是否存在缺陷?

谢谢!

最佳答案

bzip2是免费和开源的,并且有现成的库实现。它是基于 block 的,所以你可以只解压你需要的部分。但是,如果您需要查找解压文件中的特定位置,您可能需要在所有 bzip2 block 上构建一个简单的索引,以允许您确定哪个包含您需要的地址。

gzip 虽然是基于流的,但可以在任意 block 边界上重置。任意数量的 gzip 流的串联本身就是一个有效的 gzip 流,因此您可以轻松地在 block 压缩模式下操作 gzip,而不会破坏与现有解压缩器的兼容性。

关于c++ - 带有检查点的开源压缩算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5558189/

相关文章:

c++ - C 字符串数组初始化 - 这是可变的吗?

algorithm - 存储键值对的按位黑客技术

java - XML API 或开源 jar,用于根据给定路径提取 XML 子集

open-source - 在哪里可以找到适用于 IIS 的免费开源 SSL,以及如何安装它

c++ - 根据参数将数组分成 5 个不同的数组

c++ - 无法在 Mac OS 上使用 Netbeans 7.0 编译 C++ 代码

c++ - 为什么不能从 `std::filesystem::path` 迭代器构造 `std::filesystem::path` ?

algorithm - 我无法在尝试解决 spoj stavatar 的算法中找到错误

algorithm - 我如何确定所有 Actor 都收到了广播消息

open-source - 开源 HDR 库推荐