bzip2压缩块中的数据,其中每个块以幻数1AY&SY开头。
我们可以确定每个块后面的未压缩数据的大小吗?
一种方法是解压缩bzip2文件block-by-block,然后找到每个解压缩块的大小。 但是我试图找到一种不涉及解压缩的方法,我可以在压缩时间内了解未压缩块的大小。
它的用例是我们需要告诉解压缩工具什么是解压缩块的最大大小,以便它分配足够的内存。解压缩将在嵌入式平台中完成,因此我们的资源有限。
块的bzip2头格式也不包含任何有关解压缩块大小的信息。有关bzip2文件格式,请参阅维基百科page。
注意:我需要一个C代码方面的解决方案,因为我在用C开发的控制台应用程序中使用bzip2,它在Linux和Windows上运行。
答案 0 :(得分:1)
块的bzip2头格式也不包含任何信息 关于解压缩块的大小。请参阅维基百科页面 对于bzip2文件格式。
以上陈述回答了您自己的问题。您无法解压缩,因为它在解压缩之前无法使用。它不会在标题中的任何位置压缩之前对块大小进行编码,这里确认...
http://www.forensicswiki.org/wiki/Bzip2
你必须解压缩每个集团才能知道它的大小。
答案 1 :(得分:0)
在初始运行长度编码完成后,只有关于编码中使用的块大小的信息。所以,正如文章所提到的,在最坏的情况下,你可以从一个块中获得46MB的解压缩数据,而你所知道的是RLE反转之前的输出是900kB。
因此,实际上,实现此目的的唯一方法是至少将文件解压缩到RLE阶段并根据该值计算大小。