88 lines
1.6 KiB
Go
88 lines
1.6 KiB
Go
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
|
|
}
|