go实现gzip压缩、解压
下面分享一下使用go进行gzip的压缩和解压的过程
package main
import (
"bytes"
"compress/gzip"
"io"
"os"
"testing"
)
func TestCsGzip(t *testing.T) {
//压缩
err := doGzip([]byte("hello,golang"),"/data/","")
if err != nil {
t.Error(err.Error())
return
}
//解压
content ,err := unGzip("/data/")
if err != nil {
t.Error(err.Error())
return
}
t.Log(string(content))
}
/**
压缩bytes内容
1.根据指定目录创建文件
2.根据文件资源对象生成gzip Writer对象
3.往gzip Writer对象写入内容
*/
func doGzip(content []byte,path string,fileName string) error{
gzFile ,err := os.Create(path)
if err != nil {
return err
}
defer gzFile.Close()
gzipWriter := gzip.NewWriter(gzFile)
defer gzipWriter.Close()
gzipWriter.Name = fileName
_,err = gzipWriter.Write(content)
if err != nil {
return err
}
return nil
}
/**
解压
1.根据指定路径打开gzip文件资源
2.由文件资源创建gzip Reader对象
3.将gizp 内存流copy到指定buf并返回bytes
*/
func unGzip(path string)(content []byte,err error) {
gzipFile, err := os.Open(path)
if err != nil {
return
}
defer gzipFile.Close()
gzipReader, err := gzip.NewReader(gzipFile)
if err != nil {
return
}
defer gzipReader.Close()
var buf bytes.Buffer
_,err = io.Copy(&buf,gzipReader)
if err != nil {
return nil, err
}
return buf.Bytes() ,nil
}