如何在不解压缩整个文件的情况下找出大型.gz文件的未压缩长度?

时间:2014-09-14 11:09:18

标签: file-io large-files gz

我使用了许多进入GB 10s的文件。为了使内容更易于管理,我通常会对它们进行gzip,并在我的程序中即时解压缩数据。但是,检查内容需要知道文件内容的长度。

当文件小于4GB时,可以通过读取最后4个字节并将其解释为整数长度来轻松实现,但是当未压缩内容大于4GB时,此方法不能实现(因为长度不再适合于32位值)。

当然,总是有可能解压缩和计算解压缩的字节,但这非常耗时。有更快的方法吗?

编辑1:对文件格式的进一步研究表明,DEFLATE块格式知道未压缩数据,其前缀为块长度(在这种情况下是未压缩长度,因为块未被压缩)开头),所以至少可以跳过这些块。但是,压缩块似乎没有长度字段,因此需要从压缩流计算(在这种情况下,长度计数算法需要重新创建霍夫曼编码并使用LZ77距离代码总结一下。

0 个答案:

没有答案