【发布时间】:2016-04-06 07:27:59
【问题描述】:
bzip2 以块为单位压缩数据,其中每个块以幻数1AY&SY 开头。
我们可以确定每个块后面的未压缩数据的大小吗?
一种方法是解压bzip2文件block-by-block,然后找到每个解压块的大小。 但是我正在尝试找到一种不涉及解压缩的方法,并且我可以在压缩期间了解未压缩块的大小。
它的用例是我们需要告诉解压工具解压块的最大大小是多少,以便它分配足够的内存。解压会在嵌入式平台上完成,资源有限。
块的 bzip2 标头格式也不包含任何关于解压缩块大小的信息。 bzip2 文件格式见维基百科page。
注意:我需要 C 代码方面的解决方案,因为我在用 C 开发的控制台应用程序中使用 bzip2,它在 Linux 和 Windows 上都运行。
【问题讨论】:
-
另见Bzip手册和Utility functions | BZ2_bzBuffToBuffDecompress:"因为无法提前知道压缩数据的压缩比,所以没有简单的方法可以保证输出缓冲区会很大够了。你当然可以在你的代码中安排记录未压缩数据的大小,但是这样的机制超出了这个库的范围……”