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!