首頁 > 後端開發 > Golang > 為什麼 Python 和 Go zlib 對於相同的輸入產生不同的壓縮輸出?

為什麼 Python 和 Go zlib 對於相同的輸入產生不同的壓縮輸出?

DDD
發布: 2024-10-29 06:16:02
原創
680 人瀏覽過

 Why do Python and Go zlib generate different compressed output for the same input?

Golang 與Python zlib:剖析輸出差異

在提供的程式碼片段中,您嘗試使用Python 和Python 來壓縮字串zlibz和Go 的flate 包。但是,您的 Python 實作產生的輸出與 Go 對應的輸出不同。為什麼會這樣呢?

為了輔助調試,我們來分析一下相關的程式碼片段:

Go 實作(compress.go)

Go 程式碼中的關鍵步驟是關閉Writer,它會刷新壓縮資料並將校驗和寫入末尾。

Python 實作 (compress.py)

這裡,您已經透過呼叫compressor.flush(zlib.Z_SYNC_FLUSH)明確刷新了壓縮器。

剖析輸出

Python 輸出包含第五位元組為 0,而 Go 為 4。前者是 Zlib 對資料結尾處理的結果。後者是由於 Flate 在關閉編寫器時剝離了標頭和校驗和。

彌合輸出差距

要從兩個實作中獲得可比較的輸出,您可以:

  1. 在Go 中使用Flush(): 在Go 程式碼中將w.Close() 替換為w.Flush() 以發出不帶校驗和的壓縮資料。

  2. 調整 Python 的 Zlib 設定: 我個人還沒有探索過是否可以強制 Python 的 zlib 輸出沒有標頭或校驗和的完整 DEFLATE 流。然而,這可能是個有成效的追求途徑。

結論

雖然您可以調整參數以強制逐字節匹配在兩種實現之間,這是沒有必要的,甚至是不需要的。不同壓縮庫之間的輸出相容性有保證,但不完全相同。

以上是為什麼 Python 和 Go zlib 對於相同的輸入產生不同的壓縮輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板