簡體   English   中英

如何在系統重啟后繼續解壓步驟? zlib

[英]How to continue the decompressing step over system reboots ? zlib

假設我有一個 100GB 的壓縮文件,在解壓縮 76% 之后,我的設備因其他事件而重新啟動,然后我只想從我上次停止的 76% 標記處繼續解壓縮。 就是這樣。

為了解決這個問題,我可以控制文件的壓縮和歸檔方式。

但是在設備上解壓縮時,沒有命令行,只有 zlib API 可用,或者可能需要任何新的 API。

這是一個轉貼,一個改寫的問題,為了清楚起見,我對此表示歉意。 之前建議 Z_FULL_FLUSH,但我不明白我將如何使用 76% 標記的偏移量來初始化 zlib。

非常感謝任何反饋。
謝謝

通讀 zlib 的 FAQ 和帶注釋的使用頁面,以更好地理解 deflate、inflate 如何在壓縮的 stream 中協同工作。

為此,您甚至不需要專門准備 gzip 文件。 您可以定期保存通貨膨脹的 state。 如果中斷,則回滾到之前保存的 state 並從那里開始。

您可以使用Z_BLOCK讓 inflate inflate()在放氣塊邊界處返回。 這將在 zlib.h 中記錄的data_type中注明。 您將選擇一定數量的未壓縮數據,然后保存新的 state。例如 16 MB。 達到該數量后,在下一個放氣塊邊界將保存壓縮數據中的位置,這是該字節內的字節偏移量和位偏移量,您保存到的未壓縮數據中的位置,以及未壓縮的最后 32K數據,您可以使用inflateGetDictionary()獲取這些數據。

要從最后一個 state 重新開始,進行原始膨脹,使用inflatePrime()從壓縮數據偏移處的字節中提取位,並使用inflateSetDictionary()提供 32K 的歷史記錄。 查找 output 文件中保存的偏移量,從那里開始寫入。 然后繼續充氣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM