"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué Python y Golang Zlib producen diferentes salidas comprimidas?

¿Por qué Python y Golang Zlib producen diferentes salidas comprimidas?

Publicado el 2024-11-08
Navegar:431

Why Do Python and Golang Zlib Produce Different Compressed Outputs?

Comprensión de la diferencia entre las salidas de Golang y Python Zlib

Al comprimir una cadena usando la compresión Zlib, la biblioteca zlib de Python produce una salida diferente en comparación con Implementación zlib de Golang. Específicamente, el quinto byte difiere: Python tiene un valor de 0, mientras que Golang tiene un valor de 4.

Causa de la diferencia

La disparidad en las salidas se debe de los diferentes mecanismos de vaciado utilizados por las bibliotecas Python y Go. El valor predeterminado zlib de Python es Z_FLUSH, que vacía el búfer después de comprimir cada bloque de datos. Por el contrario, la biblioteca flate de Golang, que implementa Zlib, usa Z_SYNC_FLUSH de forma predeterminada. Este comportamiento vacía los datos después de que se haya procesado todo el flujo de entrada.

Cómo obtener el mismo resultado en Golang

Para obtener el mismo resultado que zlib de Python, reemplace Close() con Flush() en el código Go:

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

    return buf.Bytes()
}

Bytes versus flujo completo

Es importante tener en cuenta que el resultado del ejemplo de Python no es un flujo completo. Solo vacía el búfer después de comprimir la primera cadena.

Limitaciones de la coincidencia byte a byte

Comparar la salida byte a byte de diferentes bibliotecas de compresión con hacer coincidir datos comprimidos generalmente no es factible ni práctico. Se garantiza que el resultado producido por las bibliotecas de compresión será compatible, no idéntico.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3