package baseutils import ( "bytes" "compress/flate" "compress/zlib" "io/ioutil" "github.com/micro/go-micro/util/log" ) // UnzipByteArray zip解压缩 func UnzipByteArray(data []byte) ([]byte, error) { reader, err := zlib.NewReader(bytes.NewReader(data)) if err != nil { return nil, err } retBytes, err := ioutil.ReadAll(reader) defer reader.Close() if err != nil { return nil, err } return retBytes, nil } // CompressByteArray zip压缩 func CompressByteArray(data []byte) []byte { var in bytes.Buffer w := zlib.NewWriter(&in) w.Write(data) w.Close() return in.Bytes() } // 进行zlib压缩 func DoZlibCompress(src []byte) []byte { var in bytes.Buffer w, _ := zlib.NewWriterLevel(&in, zlib.DefaultCompression) w.Write(src) w.Close() return in.Bytes() } func AE(msg []byte) []byte { ml := len(msg) var pwd []byte for i := 0; i < ml; i++ { S := 0xAE ^ msg[i] pwd = append(pwd, S) } return DoZlibCompress(pwd) } // DeflateZip DeflateZip func DeflateZip(data []byte) []byte { // 一个缓存区压缩的内容 buffer := bytes.NewBuffer(nil) // 创建一个flate.Writer flateWrite, err := flate.NewWriter(buffer, flate.BestCompression) if err != nil { log.Info("DeflateZip err = ", err) return nil } defer flateWrite.Close() flateWrite.Write(data) flateWrite.Flush() return buffer.Bytes() } // DeflateUnZip DeflateUnZip func DeflateUnZip(data []byte) []byte { // 一个缓存区压缩的内容 flateReader := flate.NewReader(bytes.NewReader(data)) defer flateReader.Close() // 输出 retBytes, err := ioutil.ReadAll(flateReader) if err != nil { log.Info("DeflateUnZip err = ", err) return nil } return retBytes }