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

Open-Source compression algorithm with Checkpoints

本文关键字:开源 压缩算法 检查点      更新时间:2023-10-16

我正在使用gcc 4.5.0和msvc8/9的c++工作。

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

然而,文件内容是这样的,我不必每次使用它们时都需要其中的所有内容。

例如,有一次我打开其中一个压缩文件,并决定在不加载文件的情况下查找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是免费和开源的,并且有现成的库实现。它是基于块的,所以你可以只解压你需要的部分。但是,如果需要在解压缩文件中查找特定位置,则可能需要在所有bzip2块上构建一个简单的索引,以便确定哪一个块包含所需的地址。

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

我不确定开源,但是已经有相当数量的程序做到了这一点。如果输入是静态的,那就非常简单了——选择一个固定的块大小,并在压缩这么多输入数据后重新启动压缩器。

如果内容是动态的,事情会变得有点难看,因为当您更改输入块的内容时,通常会更改其大小。至少有两种方法可以处理这个问题:一种是在块之间插入少量的填充,这样就可以在适当的地方容纳小的更改(例如,开始时作为64K块的输入被四舍五入到512字节压缩块的整数)。第二种方法是创建一个索引,将压缩块映射到解压缩块。

一种简单的方法是将未压缩的内容分成"块",并独立地压缩每个块。它们整体上不会压缩得很好(因为您不会在块之间"共享"),但是您可以独立地解压块。

压缩视频中的"关键帧"是这种通用方法的特殊情况。

http://sourceforge.net/projects/gzx