c - 我们如何知道一个 bzip2 block 的未压缩数据的大小?

标签 c bzip2

bzip2 以块为单位压缩数据,其中每个块以一个魔数(Magic Number) 1AY&SY 开始.

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

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

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

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

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

最佳答案

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.



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

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

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

关于c - 我们如何知道一个 bzip2 block 的未压缩数据的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36444263/

相关文章:

bash - 使用bzip2将完整目录压缩到名称取决于当前日期的tar文件中

optimization - x86 和 +1 shift 的快速 memmove(用于 Move-to-front 转换)

android - 从 android/linux 中的特定 PID 获取所有日志?

c - 如果使用字符串不起作用

c++ - 有没有比fseek和fwrite更快的写入方法?

c - 如何将枚举常量的值设置在int范围之外?

c++ - 使用 bzip boost iostream - 未解析的符号

hadoop - 如何让EMR先执行customer jar

c++ - 如何在 Windows 上使用 gzip 和 bzip2 支持构建 boost iostreams

c - 使用 (LibreSSL) libcrypto 使用 AES-256-GCM 加密