gzip を使用してデータを圧縮する場合、Java と Go では異なる結果が生成されることがあります。この不一致は、いくつかの要因によるものです。
Java のバイト型は符号付きで、-128 から 127 までの値が許容されます。一方、Go のバイト型は uint8 のエイリアスです。したがって、Java のバイト値と Go の uint8 値を比較するには、次の調整が必要です。 Java の負の値に 256 を加算します。
Gzip の圧縮レベルは実装やリリースによって異なる場合があります。 Java と Go のデフォルトはレベル 6 ですが、このレベルは標準化されていないため、異なる結果が生じる可能性があります。
Gzip は、確率ベースのツリーを使用する LZ77 およびハフマン コーディングを利用して、出力コードを割り当てます。入力文字の頻度やビット パターンの違いにより、コードが変化し、最終的な出力に影響を与える可能性があります。
Gzip には、追加情報を格納するオプションのヘッダーが含まれています。 Go はこれらのヘッダーを設定して挿入しますが、Java は行いません。この違いは、出力のさらなる変動に寄与します。
同一の出力が必要な場合、圧縮レベルを 0 (圧縮なし) に設定することが唯一の解決策です。 Java では、Deflater.NO_COMPRESSION を使用します。 Go では、gzip.NoCompression.
を使用しますが、違いはありますが、データを圧縮しても圧縮解除のプロセスに影響を与えることはありません。標準により互換性が保証されています。
以上がJava と Go で異なる GZIP 圧縮出力が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。