我们如何得知 bzip2 块的未压缩数据的大小?

How can we learn the size of uncompressed data of a bzip2 block?

bzip2 以块的形式压缩数据,每个块都以一个幻数 1AY&SY.

开头

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

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

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

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

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

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

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

bzip2 header format for a block also does not contain any information about what will be the size of decompressed block. See wikipedia page for the bzip2 file format.

以上陈述回答了你自己的问题。你不能,因为它在解压前不可用。它不会在 header 中的任何地方压缩之前对块大小进行编码,在这里确认...

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

您必须解压缩每个块才能知道它的大小。