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 in den Ausgaben ergibt sich 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 Golangs Flate-Bibliothek, 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:
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. vollständiger Stream
Es ist wichtig zu beachten, dass die Ausgabe des Python-Beispiels kein vollständiger Stream ist. Der Puffer wird erst geleert, nachdem die erste Zeichenfolge komprimiert wurde.
Einschränkungen des Byte-zu-Byte-Abgleichs
Vergleich der Byte-zu-Byte-Ausgabe verschiedener Komprimierungsbibliotheken mit Komprimierte Daten abzugleichen ist im Allgemeinen nicht möglich oder praktikabel. Die von Komprimierungsbibliotheken erzeugte Ausgabe ist garantiert kompatibel und nicht identisch.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3