Maison > développement back-end > Golang > le corps du texte

Pourquoi le « flate » de Golang produit-il une sortie de compression différente de celle du « zlib » de Python ?

DDD
Libérer: 2024-10-30 19:43:02
original
144 Les gens l'ont consulté

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

Différence de sortie de compression entre le zlib de Golang et le zlib de Python

Pour résoudre les différents résultats de compression observés entre le zlib de Python et le flate de Golang, il est Il est important de noter qu'ils utilisent différentes implémentations sous-jacentes.

En Python, zlib est utilisé, qui est une bibliothèque basée sur DEFLATE qui génère des données au format zlib. D'un autre côté, Golang utilise flate, une implémentation DEFLATE.

Cause de l'écart de sortie

L'écart observé provient du cinquième octet de la sortie : le zlib de Python le définit sur 0, tandis que le flate de Golang le définit sur 4. Cette différence se produit parce que le zlib de Python est configuré pour vider le tampon après avoir compressé la première chaîne, tronquant ainsi la sortie.

Pour reproduire le comportement de Python dans Golang, les développeurs peut remplacer Close() par Flush() dans le compresseur :

<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>
Copier après la connexion

Compatibilité par rapport à une sortie identique

Cependant, il est essentiel de reconnaître que même après avoir ajusté Si la fonction de Golang correspond à celle de Python, les correspondances octet par octet résultantes ne sont pas garanties. La compatibilité entre les bibliothèques de compression est garantie, mais un résultat identique peut ne pas être obtenu.

Les écarts proviennent des différences inhérentes aux implémentations des bibliothèques et des paramètres spécifiques utilisés lors de la compression. Par conséquent, il n'est pas conseillé de s'appuyer sur l'égalité octet par octet entre les différentes bibliothèques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!