代码拉取完成,页面将自动刷新
package compress
import (
"fmt"
"github.com/DataDog/zstd"
)
// ZstdLevel compression level used by Zstd
const ZstdLevel = 1 // fastest
type noOp struct{}
func (n noOp) Name() string { return "Noop" }
func (n noOp) CompressBound(l int) int { return l }
func (n noOp) Compress(dst, src []byte) (int, error) {
if len(dst) < len(src) {
return 0, fmt.Errorf("buffer too short: %d < %d", len(dst), len(src))
}
copy(dst, src)
return len(src), nil
}
func (n noOp) Decompress(dst, src []byte) (int, error) {
if len(dst) < len(src) {
return 0, fmt.Errorf("buffer too short: %d < %d", len(dst), len(src))
}
copy(dst, src)
return len(src), nil
}
// ZStandard implements Compressor interface using zstd library
type ZStandard struct {
level int
}
// Name returns name of the algorithm Zstd
func (n ZStandard) Name() string { return "Zstd" }
// CompressBound max size of compressed data
func (n ZStandard) CompressBound(l int) int { return zstd.CompressBound(l) }
// Compress using Zstd
func (n ZStandard) Compress(dst, src []byte) (int, error) {
d, err := zstd.CompressLevel(dst, src, n.level)
if err != nil {
return 0, err
}
if len(d) > 0 && len(dst) > 0 && &d[0] != &dst[0] {
return 0, fmt.Errorf("buffer too short: %d < %d", cap(dst), cap(d))
}
return len(d), err
}
// Decompress using Zstd
func (n ZStandard) Decompress(dst, src []byte) (int, error) {
d, err := zstd.Decompress(dst, src)
if err != nil {
return 0, err
}
if len(d) > 0 && len(dst) > 0 && &d[0] != &dst[0] {
return 0, fmt.Errorf("buffer too short: %d < %d", len(dst), len(d))
}
return len(d), err
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。