Python vs. Go zlib-Ausgabediskrepanzen
Beim Vergleich der Ausgaben der zlib-Implementierungen von Python und Go tritt ein deutlicher Unterschied beim Komprimieren der Zeichenfolge auf. foo". Die Python-Version gibt eine Ausgabe mit einem fünften Byte zurück, das auf 0 gesetzt ist, während die Go-Version stattdessen eine 4 ausgibt.
Komprimierungsparameter
Um diese Diskrepanz zu verstehen, ist es Es ist unbedingt erforderlich, die verwendeten Komprimierungsparameter zu untersuchen. Der Go-Code verwendet flate.NewWriter, der einen DEFLATE-Stream mit einer Komprimierungsstufe von 7 generiert. Der entsprechende Python-Code initialisiert ein zlib.compressobj mit der DEFLATED-Methode und einer Komprimierungsstufe von -15.
Ausgabeunterschiede
Der Hauptunterschied liegt in der Byte-Ausgabe jeder Implementierung. Standardmäßig leert Python zlib den Puffer, nachdem die Eingabe mit zlib.Z_FLUSH verarbeitet wurde. Dies entspricht zlib.Z_SYNC_FLUSH der Go-Implementierung. Im Go-Code bedeutet jedoch der Aufruf von Close() für das Writer-Objekt das Ende des Streams und erzeugt eine vollständige zlib-Ausgabe.
Auflösen der Diskrepanz
Zu Um die gewünschte Ausgabe des Go-Codes zu erreichen, kann Close() durch Flush() ersetzt werden. Diese Aktion emuliert das Verhalten von Python, leert den Puffer und beendet den Stream. Um alternativ den rohen, vollständigen DEFLATE-Stream von Python zlib zu erhalten, sind möglicherweise weitere Untersuchungen erforderlich, da das Standardausgabeformat zlib-formatiert ist.
Auswirkungen
Vergleich der Ausgaben verschiedener Komprimierungsbibliotheken ist kein zuverlässiger Ansatz. Während die Daten kompatibel bleiben sollten, ist das Erreichen von Byte-zu-Byte-Übereinstimmungen aufgrund implementierter spezifischer Nuancen eine Herausforderung.
Das obige ist der detaillierte Inhalt vonWarum erzeugen die zlib-Implementierungen von Python und Go unterschiedliche Ausgaben für denselben String?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!