【发布时间】:2010-12-30 06:00:00
【问题描述】:
根据 gz 的规范,文件大小保存在 .gz 文件的最后 4 个字节中。
我创建了 2 个文件
dd if=/dev/urandom of=500M bs=1024 count=500000
dd if=/dev/urandom of=5G bs=1024 count=5000000
我压缩了它们
gzip 500M 5G
我检查了最后 4 个字节
tail -c4 500M|od -I (returns 512000000 as expected)
tail -c4 5G|od -I (returns 825032704 as not expected)
似乎击中了不可见的 32 位屏障,使得写入 ISIZE 的值完全是无稽之谈。这比他们使用一些错误位更烦人。
有谁知道从 .gz 中获取未压缩的 .gz 文件大小而不提取它的方法?
谢谢
规格:http://www.gzip.org/zlib/rfc-gzip.html
编辑: 如果有人想试试,你可以使用 /dev/zero 代替 /dev/urandom
【问题讨论】:
-
dd seek=10G if=/dev/zero of=out.dat count=0对于大多数文件系统来说更方便
标签: 64-bit 32-bit filesize gunzip gzip