This is a creation in Article, where the information may have evolved or changed.
Https://github.com/datadog/zstd
Import (
"ZSTD"
"IO"
)
Type Zstdencoder struct {
File *os. File
Zstdwriter *ZSTD. Writer
}
Level is compression: 1~19, the larger the slower. Default is 3
Func newzstdencoder (filename string, level int) (*ZSTDENCODER,ERROR) {
F,err: = os. Create (filename)
If err! = Nil {
return nil, err
}
W: = Zstd. Newwriterlevel (F,level)
Return &zstdencoder{file:f,zstdwriter:w},nil
}
Func (S *zstdencoder) Close () {
S.zstdwriter.close ()
S.file.close ()
}
Func zstdcompressfile (dst,src string, Compress_level int) Error {
Log. Println ("Zstd", SRC, "--", DST)
S,err: = Newzstdencoder (Dst,compress_level)
Defer S.close ()
If err! = Nil {
return err
}
Src_file,err: = os. Open (SRC)
If err! = Nil {
return err
}
Defer src_file. Close ()
Io. Copy (S.zstdwriter, Src_file)
return Nil
}
Func zstddecompressfile (DST, src string) error {
Log. Println ("Zstd", SRC, "--", DST)
In_file, err: = OS. Open (SRC)
If err! = Nil {
return err
}
Defer in_file. Close ()
Out_file, err: = OS. Create (DST)
If err! = Nil {
return err
}
Defer out_file. Close ()
Zst_reader: = zstd. Newreader (In_file)
Io. Copy (Out_file, Zst_reader)
return Nil
}