我可以使用zlib标头作为分隔符吗?

时间:2015-01-21 20:10:06

标签: zlib

我有多个用zlib压缩的数据块。我想连接这些数据块并将其存储在一个文件中。

显然,我可以使用类似JSON或XML的东西来分隔zlib数据块,但我想知道为了节省空间,我是否可以搜索下一个78 0178 9C78 DA

基本上我的问题是,从理论上讲,这些字节组合可以存在于zlib数据流中,或者我可以确定当我找到这些字节组合之一时,会启动一个新的zlib数据块,并且结束于找到的位置减1?

我知道未压缩数据块的长度总是1024字节或更少,因此压缩流永远不会是> 1024字节。

1 个答案:

答案 0 :(得分:2)

不,你不能。任何字节序列都可以出现在压缩数据中。在任何字节位置,有1/1024的概率找到有效的zlib头。因此,您会在长压缩流中找到 lot 的有效zlib标头,这些标头实际上不是zlib标头。

您可以创建自己的字节填充方案,该方案包含任意数据,包括zlib流或其他任何数据,以确保某些序列不会发生,除非它们确实是分隔符。这样的方案可能导致数据的任意小扩展。例如,如果您在数据中连续找到三个0xff,则插入0x00个字节。然后0xff 0xff 0xff 0xff可以是分隔符,因为它永远不会出现在数据中。这只会使流平均扩大约0.000006%。