Re-use zstd and zlib readers
This commit is contained in:
@@ -2,17 +2,31 @@ package decompress
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"compress/zlib"
|
||||
"io"
|
||||
"sync"
|
||||
|
||||
"github.com/klauspost/compress/zlib"
|
||||
)
|
||||
|
||||
type Zlib struct{}
|
||||
type Zlib struct {
|
||||
pool sync.Pool
|
||||
}
|
||||
|
||||
func (z Zlib) Decompress(data []byte) ([]byte, error) {
|
||||
rdr, err := zlib.NewReader(bytes.NewReader(data))
|
||||
func NewZlib() *Zlib {
|
||||
return &Zlib{}
|
||||
}
|
||||
|
||||
func (z *Zlib) Decompress(data []byte) ([]byte, error) {
|
||||
rdr := z.pool.Get()
|
||||
defer z.pool.Put(rdr)
|
||||
var err error
|
||||
if rdr == nil {
|
||||
rdr, err = zlib.NewReader(bytes.NewReader(data))
|
||||
} else {
|
||||
err = rdr.(zlib.Resetter).Reset(bytes.NewReader(data), nil)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rdr.Close()
|
||||
return io.ReadAll(rdr)
|
||||
return io.ReadAll(rdr.(io.ReadCloser))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user