欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

go实现gzip压缩、解压

程序员文章站 2024-03-13 23:39:28
...

go实现gzip压缩、解压

下面分享一下使用go进行gzip的压缩和解压的过程

package main

import (
	"bytes"
	"compress/gzip"
	"io"
	"os"
	"testing"
)

func TestCsGzip(t *testing.T)  {
	//压缩
	err := doGzip([]byte("hello,golang"),"/data/aaa.gz","test.txt")
	if err != nil {
		t.Error(err.Error())
		return
	}

	//解压
	content ,err := unGzip("/data/aaa.gz")
	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
}

相关标签: go gzip zip