github.com/lingyao2333/mo-zero@v1.4.1/core/codec/gzip.go (about)

     1  package codec
     2  
     3  import (
     4  	"bytes"
     5  	"compress/gzip"
     6  	"io"
     7  )
     8  
     9  const unzipLimit = 100 * 1024 * 1024 // 100MB
    10  
    11  // Gzip compresses bs.
    12  func Gzip(bs []byte) []byte {
    13  	var b bytes.Buffer
    14  
    15  	w := gzip.NewWriter(&b)
    16  	w.Write(bs)
    17  	w.Close()
    18  
    19  	return b.Bytes()
    20  }
    21  
    22  // Gunzip uncompresses bs.
    23  func Gunzip(bs []byte) ([]byte, error) {
    24  	r, err := gzip.NewReader(bytes.NewBuffer(bs))
    25  	if err != nil {
    26  		return nil, err
    27  	}
    28  	defer r.Close()
    29  
    30  	var c bytes.Buffer
    31  	if _, err = io.Copy(&c, io.LimitReader(r, unzipLimit)); err != nil {
    32  		return nil, err
    33  	}
    34  
    35  	return c.Bytes(), nil
    36  }