【问题标题】:EOF detection by ZLib Gzip API?ZLib Gzip API 的 EOF 检测?
【发布时间】:2019-03-11 22:00:22
【问题描述】:

我有一个Gzip Compressed Data | 100-length RNG Pad 的示例。令人惊讶的是,zlib GZip file API 能够在 n 长度焊盘的开头检测到 EOF 而不会将其计算在内。Try Online

我尝试查看headersource code,这些是我最好的猜测:

  1. 基于源代码 - 检测到由于遇到无效字节序列而导致的流损坏 - 因此 gzread 返回 -1。
  2. 基于文件头 - 在最后一个read 期间检测末尾的CRC32,并检查其后的相应文件大小。如果匹配,则返回 EOF。

有人可以证实我的理解,即 (1) 确实正在发生。如果是这种情况,我猜测我尝试的示例可能是基于随机字节序列的未定义行为。

【问题讨论】:

  • 这个问题是否有问题 - 如果有,我可以相应地改写或编辑。

标签: c++ gzip zlib


【解决方案1】:

如果您询问 zlib 是否检测到它正在获取应该是 gzip 流的随机数据,那么是的,它通常会根据违反标头格式或 deflate 格式在少量字节内执行此操作。

【讨论】:

  • 谢谢马克。因此,在 gzip 文件末尾连接的随机字节流似乎极有可能不会违反 deflate 格式,进而不会达到 EOF,因此上述代码会失败?
  • 我不知道你所说的“失败”是什么意思,因为我不知道你的要求是什么。如果放气数据是有效的 并且 CRC 和结束时的长度匹配 并且这一切都恰好在您的数据最初结束的地方结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 2020-10-03
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
相关资源
最近更新 更多