2019-08-22 11:27:18 +02:00
|
|
|
package common
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io"
|
|
|
|
"sync"
|
2020-01-17 22:57:18 +01:00
|
|
|
|
|
|
|
"github.com/klauspost/compress/gzip"
|
2021-09-28 21:47:45 +02:00
|
|
|
"github.com/klauspost/compress/zlib"
|
2019-08-22 11:27:18 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
// GetGzipReader returns new gzip reader from the pool.
|
|
|
|
//
|
|
|
|
// Return back the gzip reader when it no longer needed with PutGzipReader.
|
|
|
|
func GetGzipReader(r io.Reader) (*gzip.Reader, error) {
|
|
|
|
v := gzipReaderPool.Get()
|
|
|
|
if v == nil {
|
|
|
|
return gzip.NewReader(r)
|
|
|
|
}
|
|
|
|
zr := v.(*gzip.Reader)
|
|
|
|
if err := zr.Reset(r); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return zr, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// PutGzipReader returns back gzip reader obtained via GetGzipReader.
|
|
|
|
func PutGzipReader(zr *gzip.Reader) {
|
|
|
|
_ = zr.Close()
|
|
|
|
gzipReaderPool.Put(zr)
|
|
|
|
}
|
|
|
|
|
|
|
|
var gzipReaderPool sync.Pool
|
2021-09-28 21:47:45 +02:00
|
|
|
|
|
|
|
// GetZlibReader returns zlib reader.
|
|
|
|
func GetZlibReader(r io.Reader) (io.ReadCloser, error) {
|
|
|
|
v := zlibReaderPool.Get()
|
|
|
|
if v == nil {
|
|
|
|
return zlib.NewReader(r)
|
|
|
|
}
|
|
|
|
zr := v.(io.ReadCloser)
|
|
|
|
if err := zr.(zlib.Resetter).Reset(r, nil); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return zr, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// PutZlibReader returns back zlib reader obtained via GetZlibReader.
|
|
|
|
func PutZlibReader(zr io.ReadCloser) {
|
|
|
|
_ = zr.Close()
|
|
|
|
zlibReaderPool.Put(zr)
|
|
|
|
}
|
|
|
|
|
|
|
|
var zlibReaderPool sync.Pool
|