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

File io 如何在不解压缩整个文件的情况下找出大型.gz文件的未压缩长度?,file-io,large-files,gzip,File Io,Large Files,Gzip,我处理了很多文件,这些文件都是10 GB的。为了使内容更易于管理,我通常在程序中动态地gzip并解压缩数据。但是,检查内容需要知道文件内容的长度 当文件小于4GB时,可以通过读取最后4个字节并将其解释为整数长度来轻松实现,但是,当未压缩内容大于4GB时,由于长度不再适合32位的值,因此这种方法不适用 当然,总是有可能解包并计算解包后的字节数,但这非常耗时。有没有更快的办法 编辑1:对文件格式的进一步研究表明,块格式知道未压缩的数据,在这种情况下,它以块长度为前缀,即未压缩的长度,因为块一开始就没

我处理了很多文件,这些文件都是10 GB的。为了使内容更易于管理,我通常在程序中动态地gzip并解压缩数据。但是,检查内容需要知道文件内容的长度

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

当然,总是有可能解包并计算解包后的字节数,但这非常耗时。有没有更快的办法


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

可能重复是和否。您链接的问题仅限于java。我仍然在考虑删除它,尽管你链接的问题的答案不是我想要的。马克·阿德勒的答案包含了你需要知道的所有内容。但是:由于您自己压缩数据,您可以1将每个文件的原始大小保存在一个单独的文档中,和/或2计算数据的典型压缩率,并使用它来猜测大小。