Mengapakah `flate` Golang Menghasilkan Output Mampatan Berbeza Daripada `zlib` Python?

DDD
Lepaskan: 2024-10-30 19:43:02
asal
202 orang telah melayarinya

Why Does Golang's `flate` Produce Different Compression Output Than Python's `zlib`?

Perbezaan dalam Output Mampatan antara zlib Golang dan zlib Python

Untuk menyelesaikan masalah hasil mampatan berbeza yang diperhatikan antara zlib Python dan flate Golang, ia adalah penting untuk ambil perhatian bahawa mereka menggunakan pelaksanaan asas yang berbeza.

Dalam Python, zlib digunakan, iaitu perpustakaan berasaskan DEFLATE yang mengeluarkan data dalam format zlib. Sebaliknya, Golang menggunakan flate, pelaksanaan DEFLATE.

Punca Percanggahan Output

Percanggahan yang diperhatikan berpunca daripada bait kelima dalam output: zlib Python menetapkannya kepada 0, manakala flate Golang menetapkannya kepada 4. Perbezaan ini timbul kerana zlib Python dikonfigurasikan untuk menyiram penimbal selepas memampatkan rentetan pertama, dengan berkesan memotong output.

Untuk meniru tingkah laku Python dalam Golang, pembangun boleh menggantikan Close() dengan Flush() dalam pemampat:

<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>
Salin selepas log masuk

Keserasian lwn. Output Identical

Walau bagaimanapun, adalah penting untuk mengenalinya walaupun selepas melaraskan Fungsi Golang untuk memadankan Python, padanan bait-untuk-bait yang terhasil tidak dijamin. Keserasian antara perpustakaan mampatan dipastikan, tetapi output yang sama mungkin tidak dapat dicapai.

Percanggahan timbul daripada perbezaan yang wujud dalam pelaksanaan perpustakaan dan parameter khusus yang digunakan semasa pemampatan. Oleh itu, bergantung pada kesamaan bait-untuk-bait antara perpustakaan yang berbeza adalah tidak digalakkan.

Atas ialah kandungan terperinci Mengapakah `flate` Golang Menghasilkan Output Mampatan Berbeza Daripada `zlib` Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan