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.
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