我一個gzip壓縮文件(100GB未壓縮40GB壓縮)。現在我想修改一些字節/字節範圍 - 我不想更改文件大小。如何修改gzip壓縮文件
例如 字節8 + 10和字節5000 - 40000
這是可能的,而不重新壓縮整個文件?
斯特凡
我一個gzip壓縮文件(100GB未壓縮40GB壓縮)。現在我想修改一些字節/字節範圍 - 我不想更改文件大小。如何修改gzip壓縮文件
例如 字節8 + 10和字節5000 - 40000
這是可能的,而不重新壓縮整個文件?
斯特凡
一句話,沒有。有必要用具有完全相同總位數的新塊替換一個或多個放氣塊,但是具有不同的內容。如果新數據在放氣時壓縮比較小,這是不可能的。即使它更具可壓縮性,也需要很多手工操作才能使比特匹配。而且它可能還不可能。
gzip的手冊頁說:「如果你想創建具有多個成員,使成員可以在以後能夠獨立地取出一個存檔文件中,使用這樣的歸檔軟件tar或zip。」我相信這意味着gzip壓縮會通過文件繼續進行,因此是上下文敏感的,因此不會允許您想要的內容。
解壓縮/補丁/重新壓縮或切換到不同的數據表示形式(可能是一個未壓縮的壓縮文件的tar或zip文件,因此您只需解壓/重新壓縮您想要更改的文件)。後者一般來說,不會將數據存儲爲簡潔,但這是您必須做出的折中。
無論你想改變文件大小沒有什麼區別(因爲根據反正原始文件的大小所產生的gzip沒放在地上),但是如果拆分壓縮文件分成部分,使得部分要修改是在孤立的塊,並使用多個文件壓縮方法,而不是單個文件gzip的方法,你可以只更新更改的文件,而無需解壓和壓縮整個文件。
在您的例子:
bytes1-7.bin \
bytes8-10.bin \ bytes.zip
bytes11-4999.bin /
bytes5000-40000.bin/
然後,你可以更新bytes8-10.bin
和bytes5000-40000.bin
而不是其他兩個。但是否這會花費更少的時間是可疑的。
你想改變原有* *文件,對不對?不是壓縮文件? – bzlm
正確。結果也會影響壓縮的結果。但我知道的數據必須應用在原始文件的頂部。想象一下像原始文件差異的東西。但是需要花費太多時間來解壓縮100GB,然後應用差異,然後再重新壓縮幾乎相同的數據(差異僅在文件的1-5%左右變化)。 – disaster123
@ disaster123我有一種感覺,即使在理論上,你已經知道這不起作用。對於任何輸入變化,任何壓縮方法都會產生完全不同的輸出。 – bzlm