这是一个特定于DEFLATE算法的问题,但与gzip和zlib有关。
假设我有一个gzip文件,我知道文件中有几个刷新点。其中一些是用Z_SYNC_FLUSH和其他Z_FULL_FLUSH制作的。如果我浏览文件,我可以找到所有的刷新点,因为它们会立即遵循0000ffff的模式。
我知道我可以在Z_FULL_FLUSH点恢复解压缩,因为解压缩所需的所有信息都可用(IE:字典被重置)。但是,如果我尝试从Z_SYNC_FLUSH解压缩,我通常得到一个“zlib.error:解压缩错误-3:无效距离太远”错误。
问题是:如果我尝试从Z_SYNC_FLUSH点解压缩,我保证要么:
换句话说,我保证我永远不会用坏数据静默解压缩(我不是在讨论gzip末尾的CRC32检查,而是zlib是否会大声抱怨)?
假设:
答案 0 :(得分:1)
如果Z_SYNC_FLUSH导致后续流没有给出远距离太远的错误,那么它偶然会与Z_FULL_FLUSH相等并且无法区分。
我不希望这种情况经常发生。