1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
- //
- // This Source Code Form is subject to the terms of the MIT License.
- // If a copy of the MIT was not distributed with this file,
- // You can obtain one at https://github.com/gogf/gf.
- // Package gcompress provides kinds of compression algorithms for binary/bytes data.
- package gcompress
- import (
- "bytes"
- "compress/zlib"
- "io"
- "github.com/gogf/gf/v2/errors/gerror"
- )
- // Zlib compresses `data` with zlib algorithm.
- func Zlib(data []byte) ([]byte, error) {
- if data == nil || len(data) < 13 {
- return data, nil
- }
- var (
- err error
- in bytes.Buffer
- writer = zlib.NewWriter(&in)
- )
- if _, err = writer.Write(data); err != nil {
- err = gerror.Wrapf(err, `zlib.Writer.Write failed`)
- return nil, err
- }
- if err = writer.Close(); err != nil {
- err = gerror.Wrapf(err, `zlib.Writer.Close failed`)
- return in.Bytes(), err
- }
- return in.Bytes(), nil
- }
- // UnZlib decompresses `data` with zlib algorithm.
- func UnZlib(data []byte) ([]byte, error) {
- if data == nil || len(data) < 13 {
- return data, nil
- }
- var (
- out bytes.Buffer
- bytesReader = bytes.NewReader(data)
- zlibReader, err = zlib.NewReader(bytesReader)
- )
- if err != nil {
- err = gerror.Wrapf(err, `zlib.NewReader failed`)
- return nil, err
- }
- if _, err = io.Copy(&out, zlibReader); err != nil {
- err = gerror.Wrapf(err, `io.Copy failed`)
- return nil, err
- }
- return out.Bytes(), nil
- }
|