我正在从http请求中读取gzip数据,如下所示:
gzr, err := gzip.NewReader(resp.Body)
handle(err)
然后保守地为未压缩的数据分配一个分片。
cl := resp.Header.Get("Content-Length")
icl, err := strconv.Atoi(cl)
handle(err)
ubs := make([]byte, icl*3)
最后在阅读后修剪 slice
_, err = gzr.Read(ubs)
ubs = bytes.TrimRightFunc(ubs, sliceFunc)
有一个更好的方法吗 ?
最佳答案
对于初学者,.Read
返回读取的字节数,因此您可以执行以下操作:
n, err = gzr.Read(ubs)
ubs = ubs[:n]
您也可以使用
bytes.Buffer
池并执行以下操作:buf := getBufferFromPool()
io.Copy(buf, gzr)