在go语言中Gzip文件压缩实例

2023-06-01 00:00:00 语言 实例 文件压缩

在go语言中如何将一个未压缩的文件内容读入一个缓冲区,对缓冲区进行gzip,并将缓冲区的内容写入一个新文件。

示例代码:

 package main
 
 import (
         "bufio"
         "bytes"
         "compress/gzip"
         "flag"
         "fmt"
         "io/ioutil"
         "os"
 )
 
 func main() {
         flag.Parse() //从命令行中获取参数
         filename := flag.Arg(0)
         if filename == "" {
                 fmt.Println("Usage : go-gzip sourcefile")
                 os.Exit(1)
         }
         rawfile, err := os.Open(filename)
         if err != nil {
                 fmt.Println(err)
                 os.Exit(1)
         }
         defer rawfile.Close()
         // calculate the buffer size for rawfile
         info, _ := rawfile.Stat()
         var size int64 = info.Size()
         rawbytes := make([]byte, size)
         // read rawfile content into buffer
         buffer := bufio.NewReader(rawfile)
         _, err = buffer.Read(rawbytes)
         if err != nil {
                 fmt.Println(err)
                 os.Exit(1)
         }
         var buf bytes.Buffer
         writer := gzip.NewWriter(&buf)
         writer.Write(rawbytes)
         writer.Close()
         err = ioutil.WriteFile(filename+".gz", buf.Bytes(), info.Mode())
         // use 0666 to replace info.Mode() if you prefer
         if err != nil {
                 fmt.Println(err)
                 os.Exit(1)
         }
         fmt.Printf("%s compressed to %s\n", filename, filename + ".gz")
 }


测试结果示例 :

./go-gzip
用法:go-gzip sourcefile
./go-gzip uncompressed.txt
uncompressed.txt 压缩为 uncompressed.txt.gz


相关文章:

在go语言中Gunzip文件(gz文件)解压示例

https://www.zongscan.com/demo333/96108.html

相关文章