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 在關閉編寫器時剝離了標頭和校驗和。
彌合輸出差距
要從兩個實作中獲得可比較的輸出,您可以:
在Go 中使用Flush(): 在Go 程式碼中將w.Close() 替換為w.Flush() 以發出不帶校驗和的壓縮資料。
結論
雖然您可以調整參數以強制逐字節匹配在兩種實現之間,這是沒有必要的,甚至是不需要的。不同壓縮庫之間的輸出相容性有保證,但不完全相同。
以上是為什麼 Python 和 Go zlib 對於相同的輸入產生不同的壓縮輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!