我们如何了解bzip2块的未压缩数据的大小?

时间:2016-04-06 07:28:00

标签: c bzip2

bzip2压缩块中的数据,其中每个块以幻数1AY&SY开头。

我们可以确定每个块后面的未压缩数据的大小吗?

一种方法是解压缩bzip2文件block-by-block,然后找到每个解压缩块的大小。 但是我试图找到一种不涉及解压缩的方法,我可以在压缩时间内了解未压缩块的大小。

它的用例是我们需要告诉解压缩工具什么是解压缩块的最大大小,以便它分配足够的内存。解压缩将在嵌入式平台中完成,因此我们的资源有限。

块的bzip2头格式也不包含任何有关解压缩块大小的信息。有关bzip2文件格式,请参阅维基百科page

注意:我需要一个C代码方面的解决方案,因为我在用C开发的控制台应用程序中使用bzip2,它在Linux和Windows上运行。

2 个答案:

答案 0 :(得分:1)

  

块的bzip2头格式也不包含任何信息   关于解压缩块的大小。请参阅维基百科页面   对于bzip2文件格式。

以上陈述回答了您自己的问题。您无法解压缩,因为它在解压缩之前无法使用。它不会在标题中的任何位置压缩之前对块大小进行编码,这里确认...

http://www.forensicswiki.org/wiki/Bzip2

你必须解压缩每个集团才能知道它的大小。

答案 1 :(得分:0)

在初始运行长度编码完成后,只有关于编码中使用的块大小的信息。所以,正如文章所提到的,在最坏的情况下,你可以从一个块中获得46MB的解压缩数据,而你所知道的是RLE反转之前的输出是900kB。

因此,实际上,实现此目的的唯一方法是至少将文件解压缩到RLE阶段并根据该值计算大小。