我使用了许多进入GB 10s的文件。为了使内容更易于管理,我通常会对它们进行gzip,并在我的程序中即时解压缩数据。但是,检查内容需要知道文件内容的长度。
当文件小于4GB时,可以通过读取最后4个字节并将其解释为整数长度来轻松实现,但是当未压缩内容大于4GB时,此方法不能实现(因为长度不再适合于32位值)。
当然,总是有可能解压缩和计算解压缩的字节,但这非常耗时。有更快的方法吗?
编辑1:对文件格式的进一步研究表明,DEFLATE块格式知道未压缩数据,其前缀为块长度(在这种情况下是未压缩长度,因为块未被压缩)开头),所以至少可以跳过这些块。但是,压缩块似乎没有长度字段,因此需要从压缩流计算(在这种情况下,长度计数算法需要重新创建霍夫曼编码并使用LZ77距离代码总结一下。