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