我有一些文件,有一些随机字节和多个gzip文件。如何在某个文件中找到gzip流的开始和结束? gzip流之间有很多随机字节。所以,基本上我需要找到任何gzip文件并从那里获取它。
答案 0 :(得分:8)
阅读RFC 1952 - GZIP :
每个GZIP文件只是一堆数据块(称为成员),每个文件包含一个。
每个成员都以以下字节开头:
DEFLATE
个文件。 0-7是保留值。成员的结尾未分隔。你必须实际走完整个会员。请注意,连接多个有效的GZIP文件会创建有效的GZIP文件。另请注意,超过成员可能仍然会导致成员的成功阅读(除非解压缩库失败并且非常彻底)。
答案 1 :(得分:2)
搜索三字节gzip签名,0x1f 0x8b 0x08。当你找到它时,尝试解码从0x1f开始的gzip流。如果你成功了,那就是一个gzip流,它结束了它的结束。如果是gzip流,则继续搜索gzip流,如果不是,则继续搜索0x08。然后你会发现所有这些,你会知道它们的位置和跨度。