如何创建未实际压缩的gzip格式文件?
可行:用gzip存储模式伪装未压缩文件
完全可以实现,gzip规范本身就支持存储模式(STORED)——不对内容做压缩,仅添加标准gzip头部和尾部,兼容所有遵循规范的gzip读取工具。
1. 无压缩gzip头部的最小格式
针对存储模式,你需要写入的最小头部字节序列(十六进制)为:
1F 8B 00 00 00 00 00 00 00 03
各字节含义:
1F 8B:gzip固定魔数,用于识别格式00:压缩方法标识,0代表存储模式(无压缩)00:标志位,无特殊扩展需求时设为000 00 00 00:文件修改时间,可设为0不影响读取00:额外标志,存储模式下固定为003:操作系统标识(这里用Unix标识,也可设为0x00表示未知,不影响兼容性)
写完头部后,直接拼接你的原始文件内容,最后还需要追加4字节的原始文件CRC32校验值(小端字节序)和4字节的原始文件长度(小端字节序),才能构成完整的合法gzip文件。
2. 快速生成兼容文件的简便方法
不用手动拼接字节,用系统自带的gzip命令就能一键生成:
gzip -c -0 你的原始文件名 > 输出的兼容gzip文件名
-0参数指定使用0级压缩(即存储模式),-c表示将结果输出到标准输出,重定向到文件即可得到完全符合要求的gzip格式文件,内容无压缩,工具可直接读取。
如果你的原始文件开头已经预留了空字节,也可以通过dd命令将上述头部写入预留位置,再拼接原始内容和校验尾部,但直接用gzip -0生成更可靠,避免手动计算CRC32和长度的错误。
3. 兼容性说明
只要你的工具是基于RFC 1952标准实现的gzip解析逻辑,就完全能识别这种存储模式的文件。目前绝大多数主流工具(如zcat、gunzip,以及Python、Java等语言的gzip库)都支持该模式,不会出现访问问题。
内容的提问来源于stack exchange,提问作者Binyamin
相关产品推荐
相关产品推荐

