首頁  >  文章  >  後端開發  >  為什麼 Python 和 Golang Zlib 會產生不同的壓縮輸出?

為什麼 Python 和 Golang Zlib 會產生不同的壓縮輸出?

Susan Sarandon
Susan Sarandon原創
2024-10-28 18:31:29739瀏覽

Why Do Python and Golang Zlib Produce Different Compressed Outputs?

了解Golang 和Python Zlib 輸出的差異

使用Zlib 壓縮來壓縮字串時,Python 的zlib 函式庫會產生與Golang 的zlib 實作。具體來說,第五個位元組不同,Python 的值為 0,而 Golang 的值為 4。

差異的原因

輸出的差異源自於 Python 和 Go 函式庫所使用的不同刷新機制。 Python的zlib預設為Z_FLUSH,它在壓縮每個資料塊後刷新緩衝區。相較之下,Golang 的 flate 函式庫實作了 Zlib,預設使用 Z_SYNC_FLUSH。此行為會在處理整個輸入流後刷新資料。

如何在Golang 中得到相同的輸出

要獲得與Python 的zlib 相同的輸出,請替換Go 程式碼中的Close() 和Flush():

<code class="go">func compress(source string) []byte {
    buf := new(bytes.Buffer)
    w, _ := flate.NewWriter(buf, 7)
    w.Write([]byte(source))
    w.Flush()

    return buf.Bytes()
}</code>

Bytes vs. Complete Stream

要注意的是,Python 範例的輸出是不是一個完整的流。它僅在壓縮第一個字串後刷新緩衝區。

位元組到位元組匹配的限制

將不同壓縮函式庫的位元組到位元組輸出與符合壓縮資料一般是不可行或不實用的。壓縮庫產生的輸出保證是相容的,而不是相同的。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn