代码之家  ›  专栏  ›  技术社区  ›  Zeeshan

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

  •  4
  • Zeeshan  · 技术社区  · 10 年前

    bzip2将数据压缩成块,每个块以一个幻数开头 1AY&SY .

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

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

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

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

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

    2 回复  |  直到 9 年前
        1
  •  1
  •   Harry    10 年前

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

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

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

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

        2
  •  0
  •   Sami Kuhmonen    10 年前

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

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

    推荐文章