Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erzeugt das Flate-Paket von Go eine andere komprimierte Ausgabe als die Zlib-Bibliothek von Python?

Warum erzeugt das Flate-Paket von Go eine andere komprimierte Ausgabe als die Zlib-Bibliothek von Python?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 17:47:03301Durchsuche

Why does Go's flate package produce a different compressed output compared to Python's zlib library?

Diskrepanz zwischen Golang und Python zlib

Beim Vergleich der Ergebnisse der Komprimierung eines Strings mit der zlib-Bibliothek von Python und dem Flate-Paket von Go treten Unterschiede auf. In dieser Frage generiert die Python-Version eine Ausgabe mit einem zusätzlichen Null-Byte, während dies bei der Golang-Version nicht der Fall ist.

Die Diskrepanz ergibt sich aus den unterschiedlichen Ansätzen der beiden Bibliotheken. Pythons zlib komprimiert Daten in ein zlib-Format, das einen Header und eine Prüfsumme enthält. Im Gegensatz dazu implementiert Gos Flate den DEFLATE-Algorithmus direkt und erzeugt einen rohen DEFLATE-Stream ohne Header oder Prüfsumme.

Um eine identische Ausgabe von Go zu erhalten, ändern Sie den Code, um den Puffer nach dem Schreiben der komprimierten Daten explizit zu leeren:

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

Es ist jedoch wichtig zu beachten, dass die Ausgabe verschiedener Komprimierungsbibliotheken möglicherweise nicht Byte für Byte identisch ist. Obwohl sie auf Kompatibilität abzielen, können die spezifischen Implementierungsdetails zu Abweichungen führen.

Das obige ist der detaillierte Inhalt vonWarum erzeugt das Flate-Paket von Go eine andere komprimierte Ausgabe als die Zlib-Bibliothek von Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn