github.com/gogf/gf/v2@v2.7.4/encoding/gcompress/gcompress_zlib.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/gogf/gf.
     6  
     7  // Package gcompress provides kinds of compression algorithms for binary/bytes data.
     8  package gcompress
     9  
    10  import (
    11  	"bytes"
    12  	"compress/zlib"
    13  	"io"
    14  
    15  	"github.com/gogf/gf/v2/errors/gerror"
    16  )
    17  
    18  // Zlib compresses `data` with zlib algorithm.
    19  func Zlib(data []byte) ([]byte, error) {
    20  	if data == nil || len(data) < 13 {
    21  		return data, nil
    22  	}
    23  	var (
    24  		err    error
    25  		in     bytes.Buffer
    26  		writer = zlib.NewWriter(&in)
    27  	)
    28  
    29  	if _, err = writer.Write(data); err != nil {
    30  		err = gerror.Wrapf(err, `zlib.Writer.Write failed`)
    31  		return nil, err
    32  	}
    33  	if err = writer.Close(); err != nil {
    34  		err = gerror.Wrapf(err, `zlib.Writer.Close failed`)
    35  		return in.Bytes(), err
    36  	}
    37  	return in.Bytes(), nil
    38  }
    39  
    40  // UnZlib decompresses `data` with zlib algorithm.
    41  func UnZlib(data []byte) ([]byte, error) {
    42  	if data == nil || len(data) < 13 {
    43  		return data, nil
    44  	}
    45  	var (
    46  		out             bytes.Buffer
    47  		bytesReader     = bytes.NewReader(data)
    48  		zlibReader, err = zlib.NewReader(bytesReader)
    49  	)
    50  	if err != nil {
    51  		err = gerror.Wrapf(err, `zlib.NewReader failed`)
    52  		return nil, err
    53  	}
    54  	if _, err = io.Copy(&out, zlibReader); err != nil {
    55  		err = gerror.Wrapf(err, `io.Copy failed`)
    56  		return nil, err
    57  	}
    58  	return out.Bytes(), nil
    59  }