Maison  >  Article  >  développement back-end  >  Pourquoi Python et Golang Zlib produisent-ils des sorties compressées différentes ?

Pourquoi Python et Golang Zlib produisent-ils des sorties compressées différentes ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 18:31:29745parcourir

Why Do Python and Golang Zlib Produce Different Compressed Outputs?

Comprendre la différence entre les sorties Golang et Python Zlib

Lors de la compression d'une chaîne à l'aide de la compression Zlib, la bibliothèque zlib de Python produit une sortie différente par rapport à Implémentation zlib de Golang. Plus précisément, le cinquième octet diffère, Python ayant une valeur de 0, tandis que Golang a une valeur de 4.

Cause de la différence

La disparité dans les sorties découle à partir des différents mécanismes de vidage utilisés par les bibliothèques Python et Go. Le zlib de Python est par défaut Z_FLUSH, qui vide le tampon après avoir compressé chaque bloc de données. En revanche, la bibliothèque flate de Golang, qui implémente Zlib, utilise Z_SYNC_FLUSH par défaut. Ce comportement vide les données une fois que l'intégralité du flux d'entrée a été traitée.

Comment obtenir la même sortie dans Golang

Pour obtenir la même sortie que le zlib de Python, remplacez Close() avec Flush() dans le code 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>

Bytes vs. Complete Stream

Il est important de noter que la sortie de l'exemple Python est pas un flux complet. Il ne vide le tampon qu'après avoir compressé la première chaîne.

Limitations de la correspondance octet à octet

Comparaison de la sortie octet à octet de différentes bibliothèques de compression à faire correspondre les données compressées n’est généralement pas réalisable ou pratique. La sortie produite par les bibliothèques de compression est garantie compatible et non identique.

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!

Déclaration:
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