一、首先定义一个压缩接口,以便支持不同的压缩方式
//压缩接口,压缩类需要实现以下两个方法
type Compressor interface {
Compress(b []byte, c []byte) ([]byte, error) //压缩数据
Decompress(c []byte, b []byte) error //解压缩数据
}
//工厂类,创建不同的压缩
func NewCompressor(compressFormat string) Compressor {
compressFormat = strings.ToLower(compressFormat)
if compressFormat == "snappy" {
return NewSnappyCompressor()
} else if compressFormat == "zlib" {
return NewZlibCompressor()
} else {
return nil
}
}
//封装一个全局读取函数,止到数据全部读完或超时
func ReadAll(conn io.Reader, data []byte) error {
left:= len(data)
for left > 0 {
n, err:= conn.Read(data)
if n == left && err == nil {
return nil
}
if n > 0 {
data = data[n:]
left -= n
}
if err != nil {
return err
}
}
return nil
}
二、实现Zlib压缩