| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- package util
- import (
- "bytes"
- "compress/gzip"
- "io"
- "log"
- )
- // 压缩数据
- // 注意:如果没有启用压缩,和数据为空不要调用该函数
- func CompressData(data []byte) (out []byte, ok bool, err error) {
- var buf bytes.Buffer
- zw := gzip.NewWriter(&buf)
- if _, err := zw.Write(data); err != nil {
- log.Println("[CompressData Write ERROR]", err)
- return data, false, err
- }
- if err := zw.Close(); err != nil {
- log.Println("[CompressData Close ERROR]", err)
- return data, false, err
- }
- compressedData := buf.Bytes()
- if len(compressedData) >= len(data) {
- return data, false, nil
- } else {
- return compressedData, true, nil
- }
- }
- // 解压缩,
- func UncompressData(compressedData []byte) (data []byte, ok bool, err error) {
- if compressedData[0]&0x01 != 0 {
- zr, err := gzip.NewReader(bytes.NewReader(compressedData[1:]))
- if err != nil {
- log.Println("[UncompressData NewReader ERROR]", err)
- return compressedData, false, err
- }
- defer zr.Close()
- uncompressedData, err := io.ReadAll(zr)
- if err != nil {
- log.Println("[UncompressData ReadAll ERROR]", err)
- return compressedData, false, err
- }
- return uncompressedData, true, nil
- } else {
- return compressedData[1:], false, nil
- }
- }
|