1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年8月25日 |
---|
#49 在 #gzip
20KB
476 行
nom-gzip
nom 解析 GZIP 文件格式,如 RFC 1952 中所述。
安装
nom-gzip 可在 crates.io 上找到,您可以通过在 Cargo.toml
文件中添加以下内容来将其用于项目
[dependencies]
nom-gzip = "0.1.0"
用法
有三个函数可用
gzip_file
gzip_header
gzip_footer
一旦解析了 GZIP 头,剩余的数据就是压缩块和一个 8 字节尾部。如果使用可查找的流,建议使用 gzip_header
解析头部,然后将剩余的字节(减去末尾的 8 个字节)作为压缩块,然后对剩余的 8 个字节调用 parse_footer
。这应该比逐字节解析查找流末尾要快得多。
关于此解析器的说明
TL;DR
此解析器假设 GZIP 流只包含一个直到 EOF 的压缩文件。
详细信息
虽然从理论上讲,可以通过简单地将多个 GZIP 文件连接起来(参见 RFC 的 2.2 节),在单个 GZIP 流中放入多个文件,但在实践中,至少 GNU GZIP 和 7z 并不完全支持这一点。对于连接在一起的两个文件,它们都会报告第一个文件的头部和第二个文件的尾部(文件的未压缩大小)。使用 gzip 工具解压缩此类文件会导致两个文件的未压缩内容连接在一起成为一个单一的文件,而不是两个具有分离内容的文件。在我看来,如果 GZIP 格式的此功能在实用意义上无法使用,那么在这里编写一个理论上正确但更加复杂(且速度更慢!)的解析器就没有意义。
依赖关系
~1MB
~22K SLoC