github.com/zly-app/zapp@v1.3.3/pkg/compactor/zstd.go (about) 1 package compactor 2 3 import ( 4 "bytes" 5 "io" 6 7 "github.com/klauspost/compress/zstd" 8 ) 9 10 const ZStdCompactorName = "zstd" 11 12 type ZStdCompactor struct{} 13 14 func (z ZStdCompactor) Compress(in io.Reader, out io.Writer) error { 15 opts := []zstd.EOption{ 16 zstd.WithEncoderLevel(zstd.SpeedFastest), // 最快压缩 17 } 18 enc, err := zstd.NewWriter(out, opts...) 19 if err != nil { 20 return err 21 } 22 _, err = io.Copy(enc, in) 23 if err != nil { 24 _ = enc.Close() 25 return err 26 } 27 return enc.Close() 28 } 29 30 func (z ZStdCompactor) CompressBytes(in []byte) (out []byte, err error) { 31 var outIO bytes.Buffer 32 err = z.Compress(bytes.NewReader(in), &outIO) 33 if err != nil { 34 return nil, err 35 } 36 return outIO.Bytes(), nil 37 } 38 39 func (z ZStdCompactor) UnCompress(in io.Reader, out io.Writer) error { 40 d, err := zstd.NewReader(in) 41 if err != nil { 42 return err 43 } 44 defer d.Close() 45 46 _, err = io.Copy(out, d) 47 return err 48 } 49 50 func (z ZStdCompactor) UnCompressBytes(in []byte) (out []byte, err error) { 51 var outIO bytes.Buffer 52 err = z.UnCompress(bytes.NewReader(in), &outIO) 53 if err != nil { 54 return nil, err 55 } 56 return outIO.Bytes(), nil 57 } 58 59 func NewZStdCompactor() ICompactor { 60 return ZStdCompactor{} 61 }