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