一种简单的方法是利用有效gzip流的串联是一个gzip流这一事实。然后在压缩时,您可以将行块压缩为单独的gzip流,并记录文件中gzip流的起始位置,以及该流中压缩的第一行的行号。然后你可以跳到那个位置并从那里开始解压缩。如果你的块大约是兆字节(大约50,000行),那么压缩率应该相对较小。然后平均而言,您需要解压缩25,000行才能到达任何给定的行,而不是750万行。
如果您无法控制gzip文件的创建,并且无法根据需要重新创建它,那么您可以使用以下方法索引现有的gzip文件 zran.c 。您可以指定接入点的接近程度,并建立一个索引,允许从每个点开始访问。您还需要为行开始构建索引(就像对未压缩文件一样),将具有字节偏移的索引与未压缩数据相关联。
您将无法在gzip文件中查明随机访问的指定行,但您可以在压缩文件中使用索引,然后使用1000行或其他内容精确定位块。 索引-的gzip 可能是一种选择。
但是,查看数据让我想知道你是否不能手动进行压缩。如果将压缩设置为固定长度,则可以计算文件中每行开始的位置,然后从该位置读取。似乎每一行只能用两个数字表示。或者我不明白格式?