如何在golang中的字符串上使用gzip?

sti*_*ian 9 gzip go

我想用去从读出一大块string,把它作为一个gzipstring这个块.我知道如何从中读取compress/gzip并将其视为一种io.writer,但是当涉及到buf我迷失了.我应该创建一个gzip.NewWriter(io.writer),它写入w *gzip.Writer(字节片),用w.Write(chunk_of_file)获得的作家指针buf..和然后使用stringgzipstring?然后我需要将字符串视为字节切片..

Int*_*net 22

您可以在gzip.Writer实现时使用io.Writer.

例:

package main

import (
    "bytes"
    "compress/gzip"
    "fmt"
    "log"
)

func main() {
    var b bytes.Buffer
    gz := gzip.NewWriter(&b)
    if _, err := gz.Write([]byte("YourDataHere")); err != nil {
        log.Fatal(err)
    }
    if err := gz.Close(); err != nil {
        log.Fatal(err)
    }
    fmt.Println(b.Bytes())
}
Run Code Online (Sandbox Code Playgroud)

操场

如果要设置压缩级别(默认值为"-1"compress/flate),则可以使用gzip.NewWriterLevel.

  • 还有一件事是Flush()只将_current_数据写入缓冲区.它没有完成整个GZIP格式.因此,在这种情况下,它是相当无用的,因为在最后一行写的不是有效的GZIP结构.你需要调用Close()_before_你用缓冲区做任何事情. (2认同)
  • 很棒的提示@PhilKulak。只需添加一点,使用_defer_关闭压缩的Writer可能会导致一些细微的错误,即在关闭缓冲区之前正在使用缓冲区。读取压缩数据时,这可能导致意外的EOF错误。小心! (2认同)