【问题标题】:How to continue the decompressing step over system reboots ? zlib如何在系统重启后继续解压步骤? zlib
【发布时间】:2022-11-21 11:09:38
【问题描述】:
假设我有一个 100GB 的压缩文件,在解压缩 76% 之后,我的设备因其他事件而重新启动,然后我只想从我上次停止的 76% 标记处继续解压缩。而已。
为了解决这个问题,我可以控制文件的压缩和归档方式。
但是在设备上解压缩时,没有命令行,只有 zlib API 可用,或者可能需要任何新的 API。
这是一个转贴,一个改写的问题,为了清楚起见,我对此表示歉意。之前建议 Z_FULL_FLUSH,但我不明白我将如何使用 76% 标记的偏移量来初始化 zlib。
非常感谢任何反馈。
谢谢
通读 zlib 的 FAQ 和带注释的使用页面,以更好地理解 deflate、inflate 如何在压缩流中协同工作。
【问题讨论】:
标签:
gzip
zlib
large-files
deflate
lossless-compression
【解决方案1】:
为此,您甚至不需要专门准备 gzip 文件。您可以定期保存通货膨胀状态。如果中断,则回滚到之前保存的状态并从那里开始。
您可以使用 Z_BLOCK 来获取 inflate() 在放气块边界处返回。这将在 data_type 中注明,如 zlib.h 中所述。您将选择一定数量的未压缩数据,然后保存新状态。例如。 16MB。达到该数量后,在下一个放气块边界将保存压缩数据中的位置,这是该字节内的字节偏移量和位偏移量,您保存到的未压缩数据中的位置,以及未压缩的最后 32K数据。
要从最后一个状态重新开始,进行原始膨胀,使用inflatePrime()从压缩数据偏移处的字节中提取位,并使用inflateDictionary()提供 32K 的历史记录。查找输出文件中保存的偏移量以从那里开始写入。然后继续充气。