【问题标题】: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 的历史记录。查找输出文件中保存的偏移量以从那里开始写入。然后继续充气。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-03
      • 2019-07-10
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      相关资源
      最近更新 更多