GZIP ライターの終了を延期するとデータが失われる
背景:
gzip を使用する場合、gzip を利用する.NewWriter を使用してデータを圧縮し、Close() を遅延してライターを閉じると損失が発生する可能性があります
問題:
GZIP ライターの終了を延期すると、GZIP フッターが失われます。 Close 関数のドキュメントで指定されているとおり:
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.
解決策:
データ損失を防ぐには、圧縮データを返す前に GZIP ライターを閉じます:
<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>
以上がGZIP Writer の終了を延期するとデータ損失が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。