带有检查点的开源压缩算法
Open-Source compression algorithm with Checkpoints
我正在使用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
- C++中高效的大型稀疏块压缩线性方程
- 嵌入方指针压缩已禁用
- C++使用整数的压缩数组初始化对象
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- NTRUEncrypt:使用开源标准算法中的描述无法正确找到两个多项式的GCD,无法定义是否存在多边形的逆
- 运行长度编码算法[数据压缩].
- 用于大型数据流的通货紧缩压缩算法
- 压缩算法(例如gzip、zip或snappy)的输出肯定小于输入吗
- 有没有一个带有距离标记的最短路径算法的开源实现
- 对高度冗余的数据使用什么压缩算法
- 整数字符串压缩算法
- 压缩2D曲线的最佳数据结构/算法是什么?
- 免费的c++开源压缩库,支持zip和zip64
- 目前有什么C/ c++库充满了众所周知的压缩算法吗?
- 在哪里可以找到散列/加密算法的开源实现(头文件)
- 如何检测c++中LZW算法压缩的字符串
- 关于图像压缩算法的混淆
- 带有检查点的开源压缩算法
- C++中的开源随机数生成算法