"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-08
Parcourir:378

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 de celle 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 provient à 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 :

func compress(source string) []byte {
    buf := new(bytes.Buffer)
    w, _ := flate.NewWriter(buf, 7)
    w.Write([]byte(source))
    w.Flush()

    return buf.Bytes()
}

Octets par rapport au flux complet

Il est important de noter que la sortie de l'exemple Python n'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.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3