gzip.go 559 B

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