ホームページ  >  記事  >  バックエンド開発  >  Go の flate パッケージが Python の zlib ライブラリとは異なる圧縮出力を生成するのはなぜですか?

Go の flate パッケージが Python の zlib ライブラリとは異なる圧縮出力を生成するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-30 17:47:03301ブラウズ

Why does Go's flate package produce a different compressed output compared to Python's zlib library?

Golang と Python zlib の不一致

Python の zlib ライブラリと Go の flate パッケージを使用して文字列を圧縮した結果を比較すると、違いが生じます。この質問では、Python バージョンではゼロ バイトが追加された出力が生成されますが、Golang バージョンでは生成されません。

この矛盾は、2 つのライブラリが採用したアプローチの違いに起因しています。 Python の zlib は、データをヘッダーとチェックサムを含む zlib 形式に圧縮します。対照的に、Go の flate は DEFLATE アルゴリズムを直接実装し、ヘッダーやチェックサムのない生の DEFLATE ストリームを生成します。

Go から同じ出力を取得するには、圧縮データの書き込み後にバッファを明示的にフラッシュするようにコードを変更します。

<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>

ただし、異なる圧縮ライブラリの出力はバイトごとに同一ではない可能性があることに注意することが重要です。互換性を目指していますが、具体的な実装の詳細によりバリエーションが生じる可能性があります。

以上がGo の flate パッケージが Python の zlib ライブラリとは異なる圧縮出力を生成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。