golang使用 gzip压缩


golang使用 gzip压缩

 

这个例子中使用gzip压缩格式,标准库还支持zlib, bz2, flate, lzw

 压缩处理_三步:

1.创建压缩文件
2.gzip write包装
3.写入数据
    outputFile, _ := os.Create("G:/test.gz") gzipWriter := gzip.NewWriter(outputFile) //gzipWriter:需要操作的句柄
 defer gzipWriter.Close() //写入gizp writer数据时,它会依次压缩数据并写入到底层的文件中
    gzipWriter.Write([]byte("hello world!\n")) log.Println("success")
解压缩_三步:
1.打开压缩文件
2.gzip Read包装
3.往新文件copy
打开一个gzip文件,它的内容不是一个文件,而是一个内存流 gzipFile, _ := os.Open("G:/test.gz") gzipReader, _ := gzip.NewReader(gzipFile) defer gzipReader.Close() outfileWriter, err := os.Create("G:/unzipped.txt") if err != nil { log.Fatal(err) } defer outfileWriter.Close() // 复制内容
    _, err = io.Copy(outfileWriter, gzipReader) if err != nil { log.Fatal(err) }

 练习

package main import ( "bufio"
    "compress/gzip"
    "fmt"
    "io"
    "log"
    "os"
    "time" ) var ( gzipWriter *gzip.Writer file *os.File err error ) func init() { //初始化创建一个压缩文件
    outputFile, err := os.Create("G:/test.txt.gz") if err != nil { log.Fatal(err) } gzipWriter = gzip.NewWriter(outputFile) //打开普通文件
    file, err = os.Open("G:/demo2.txt") if err != nil { panic(err) } } func main() { start := time.Now().UnixNano() //压缩
 compress() gzipWriter.Close() num := time.Now().UnixNano() fmt.Println("压缩", num-start) //解压缩
 unCompress() end := time.Now().UnixNano() fmt.Println("解压缩", end-num) } //读取普通文件,写入压缩文件
func compress() { reader := bufio.NewReader(file) for { s, e := reader.ReadString('\n') if e == io.EOF { break } // 写入gizp writer数据时,它会依次压缩数据并写入到底层的文件中。
        _, err := gzipWriter.Write([]byte(s)) if err != nil { log.Fatal(err) } } } // 打开一个gzip文件,它的内容不是一个文件,而是一个内存流
func unCompress() { gzipFile, err := os.Open("G:/test.txt.gz") if err != nil { log.Fatal(err) } gzipReader, err := gzip.NewReader(gzipFile) if err == io.EOF { return } defer gzipReader.Close() //创建解压后文件
    outfileWriter, err := os.Create("G:/unzipped.txt") if err != nil { log.Fatal(err) } defer outfileWriter.Close() // copy 压缩包数据copy到普通文件中
    _, err = io.Copy(outfileWriter, gzipReader) if err != nil { log.Fatal(err) } }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM