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 サイトの他の関連記事を参照してください。