Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erzeugen Python und Golang Zlib unterschiedliche komprimierte Ausgaben?

Warum erzeugen Python und Golang Zlib unterschiedliche komprimierte Ausgaben?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 18:31:29739Durchsuche

Why Do Python and Golang Zlib Produce Different Compressed Outputs?

Den Unterschied zwischen Golang- und Python-Zlib-Ausgaben verstehen

Beim Komprimieren einer Zeichenfolge mithilfe der Zlib-Komprimierung erzeugt die zlib-Bibliothek von Python eine andere Ausgabe als Golangs zlib-Implementierung. Insbesondere unterscheidet sich das fünfte Byte, wobei Python einen Wert von 0 hat, während Golang einen Wert von 4 hat.

Ursache des Unterschieds

Die Ungleichheit bei den Ausgaben ist bedingt aus den verschiedenen Löschmechanismen, die von den Python- und Go-Bibliotheken verwendet werden. Pythons zlib ist standardmäßig auf Z_FLUSH eingestellt, wodurch der Puffer nach der Komprimierung jedes Datenblocks geleert wird. Im Gegensatz dazu verwendet die Flate-Bibliothek von Golang, die Zlib implementiert, standardmäßig Z_SYNC_FLUSH. Dieses Verhalten löscht die Daten, nachdem der gesamte Eingabestream verarbeitet wurde.

So erhalten Sie die gleiche Ausgabe in Golang

Um die gleiche Ausgabe wie Pythons zlib zu erhalten, ersetzen Sie Close() mit Flush() im Go-Code:

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

Bytes vs. Complete Stream

Es ist wichtig zu beachten, dass die Ausgabe des Python-Beispiels ist kein kompletter Stream. Der Puffer wird erst geleert, nachdem die erste Zeichenfolge komprimiert wurde.

Einschränkungen der Byte-zu-Byte-Übereinstimmung

Vergleich der Byte-zu-Byte-Ausgabe verschiedener Komprimierungsbibliotheken mit Komprimierte Daten abzugleichen ist im Allgemeinen nicht möglich oder praktisch. Die von Komprimierungsbibliotheken erzeugte Ausgabe ist garantiert kompatibel und nicht identisch.

Das obige ist der detaillierte Inhalt vonWarum erzeugen Python und Golang Zlib unterschiedliche komprimierte Ausgaben?. 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