Das Aufschieben des Schließens von GZIP Writer führt zu Datenverlust
Hintergrund:
Bei der Arbeit mit gzip verwenden Sie gzip .NewWriter zum Komprimieren von Daten und das Verzögern von Close() zum Schließen des Writers kann zu einem Verlust komprimierter Daten führen.
Problem:
Das Verzögern des Schließens des GZIP-Writers verursacht das Fehlen der GZIP-Fußzeile. Wie in der Dokumentation der Close-Funktion angegeben:
Close closes the Writer by flushing any unwritten data to the underlying io.Writer and writing the GZIP footer. It does not close the underlying io.Writer.
Lösung:
Um Datenverlust zu verhindern, schließen Sie den GZIP-Writer, bevor Sie die komprimierten Daten zurückgeben:
<code class="go">func zipData(originData []byte) ([]byte, error) { var bf bytes.Buffer gw := gzip.NewWriter(&bf) _, err := gw.Write(originData) if err != nil { return nil, errors.New(fmt.Sprintf("gzip data err: %v", err)) } err = gw.Flush() if err != nil { return nil, err } if err := gw.Close(); err != nil { return nil, errors.New(fmt.Sprintf("close data err: %v", err)) } return bf.Bytes(), nil }</code>
Das obige ist der detaillierte Inhalt vonWarum führt das Aufschieben der GZIP-Writer-Schließung zu Datenverlust?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!