Potential workaround for poor zstd performance

Performance is still not great, but better
This commit is contained in:
Caleb Gardner
2022-06-21 01:09:33 -05:00
parent 1b934de04d
commit 83dfa77b7d
12 changed files with 110 additions and 30 deletions
+11 -13
View File
@@ -1,31 +1,29 @@
package decompress
import (
"bytes"
"io"
"github.com/klauspost/compress/zstd"
)
type Zstd struct{}
type Zstd struct {
writeToReader *zstd.Decoder
}
func (z Zstd) Reader(src io.Reader) (io.ReadCloser, error) {
r, err := zstd.NewReader(src)
return r.IOReadCloser(), err
}
type ZstdDecodeAll struct {
rdr *zstd.Decoder
func (z Zstd) Resetable() bool { return true }
func (z Zstd) Reset(old, src io.Reader) error {
return old.(*zstd.Decoder).Reset(src)
}
func (z *ZstdDecodeAll) Reader(src io.Reader) (io.ReadCloser, error) {
if z.rdr == nil {
z.rdr, _ = zstd.NewReader(nil)
func (z *Zstd) Decode(in []byte) (out []byte, err error) {
if z.writeToReader == nil {
z.writeToReader, _ = zstd.NewReader(nil)
}
data, err := io.ReadAll(src)
if err != nil {
return nil, err
}
out, err := z.rdr.DecodeAll(data, nil)
return io.NopCloser(bytes.NewReader(out)), err
return z.writeToReader.DecodeAll(in, nil)
}