"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que Python e Golang Zlib produzem saídas compactadas diferentes?

Por que Python e Golang Zlib produzem saídas compactadas diferentes?

Publicado em 2024-11-08
Navegar:960

Why Do Python and Golang Zlib Produce Different Compressed Outputs?

Compreendendo a diferença nas saídas Golang e Python Zlib

Ao compactar uma string usando a compactação Zlib, a biblioteca zlib do Python produz uma saída diferente em comparação com Implementação zlib de Golang. Especificamente, o quinto byte é diferente, com Python tendo um valor de 0, enquanto Golang tem um valor de 4.

Causa da diferença

A disparidade nas saídas decorre dos diferentes mecanismos de liberação usados ​​pelas bibliotecas Python e Go. O zlib do Python é padronizado como Z_FLUSH, que libera o buffer após compactar cada bloco de dados. Por outro lado, a biblioteca flate de Golang, que implementa Zlib, usa Z_SYNC_FLUSH por padrão. Esse comportamento libera os dados depois que todo o fluxo de entrada foi processado.

Como obter a mesma saída em Golang

Para obter a mesma saída do zlib do Python, substitua Close() com Flush() no 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 vs. Stream completo

É importante observar que a saída do exemplo Python não é um stream completo. Ele apenas libera o buffer após compactar a primeira string.

Limitações da correspondência byte a byte

Comparando a saída byte a byte de diferentes bibliotecas de compactação combinar dados compactados geralmente não é viável ou prático. A saída produzida pelas bibliotecas de compactação é garantidamente compatível, não idêntica.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3