我正在考虑制作两种类型的原始字节块交错的文件格式。
一个块将包含一个bzip2压缩的数据块,它的头包含通常的bzip2幻数(BZh9
)。
第二个块将由其他感兴趣的数据组成,它有一个包含不同幻数(TBD)的头。
这两个幻数将用于以不同的方式查找、识别和处理两种数据块类型。
我的问题是:是否有一个神奇的数字,我可以选择第二个块类型,这是非常不可能(或更好,不可能)在bzip2压缩的字节块中找到?
换句话说,是否存在bzip2在压缩时排除或可能不太可能使用的特定字节,在某些统计阈值内,我可以将其用于同一文件中另一个数据类型的头文件?
一种选择是,当我找到第二个块类型的头字节时,我将简单地尝试处理第二个块类型中的数据,如果处理失败,那么我假设我意外地进入了压缩的bzip2块。但是我想知道是否有可能在bzip2块中找不到字节,或者不太可能找到。
No。Bzip2压缩的数据可以包含任何字节对,基本上都具有相同的概率。您所能做的就是定义一个较长的字节序列作为签名,以减少该序列意外出现在压缩数据中的概率。但它仍然可以。
bzip2格式是自终止的,所以如果你愿意花时间解码bzip2数据,你总能找到下一个东西在哪里。
要回答注释中的问题,整个bzip2流必须在字节边界处终止。最后一个字节可能有0到7位的零垫。您可以从第二个流组件的开始向后搜索以查找bzip2结束标记0x177245385090
(pi的平方根的前12位十进制数字),它可以从特定字节中的任何位开始。它应该是80到87位。