问题在于tar
文件没有中央文件列表,但按顺序存储文件,并在每个文件之前带有标题。tar
然后通过gzip将文件压缩以提供给您tar.gz
。对于tar
文件,如果不想提取某个文件,则只需跳过header->size
存档中的下一个字节,然后读取下一个标头。如果归档文件被额外压缩,则您仍将不得不跳过那么多字节,不仅不是在归档文件内,而且还要在解压缩的数据流内对于某些压缩格式有效,而对于另一些格式,则需要跳过这两个字节之间的所有内容)。
gzip属于压缩方案的后一类。因此,尽管您通过不将不需要的文件写入磁盘节省了一些时间,但是您的代码仍将其解压缩。您可以通过重写非gzip存档的_Stream
类来克服该问题,但是对于您的gz
文件,您无能为力。