延遲GZIP 編寫器關閉會導致資料遺失
背景:
使用gzip .NewWriter 壓縮資料並延遲Close() 關閉writer 可能會導致壓縮資料遺失。
問題:
延遲關閉 GZIP writer 會導致遺失資料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 writer:
<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 編寫器關閉會導致資料遺失?的詳細內容。更多資訊請關注PHP中文網其他相關文章!