我有一个在
.gz
类文件对象中搜索的应用程序。
Python 的
gzip.GzipFile
支持这一点,但效率很低——当 GzipFile 对象被要求返回时,它将倒回到流的开头 (seek(0)
),然后读取并解压缩所有内容,直到所需的偏移量。
不用说,在寻找大型
tar.gz
文件(数十GB)时,这绝对会降低性能。
所以我希望实现检查点:时不时地存储流状态,当被要求返回时,只转到下一个先前存储的检查点,而不是一直倒回开头。
我的问题是围绕
gzip
/ zlib
实现:“当前解压器状态”由什么组成?它存储在哪里?有多大?
我如何从打开的 GzipFile 对象中复制该状态,然后将其分配回去以进行“向后跳转”搜索?
注意我无法控制输入的 .gz 文件。解决方案必须严格针对 GzipFile 只读
rb
模式。