Go 语言

Go 语言教程 Go 语言环境安装 Go 语言结构 Go 语言基础语法 Go 语言数据类型 Go 语言变量 Go 语言常量 Go 语言运算符 Go 语言条件语句 Go 语言 if 语句 Go 语言 if...else 语句 Go 语言 if 语句嵌套 Go 语言 switch 语句 Go 语言 select 语句 Go 语言循环语句 Go 语言 for 循环 Go 语言循环嵌套 Go 语言 break 语句 Go 语言 continue 语句 Go 语言 goto 语句 Go 语言函数 Go 语言函数值传递值 Go 语言函数引用传递值 Go 语言函数作为值 Go 语言函数闭包 Go 语言函数方法 Go 语言变量作用域 Go 语言数组 Go 语言多维数组 Go 语言向函数传递数组 Go 语言指针 Go 语言指针数组 Go 语言指向指针的指针 Go 语言指针作为函数参数 Go 语言结构体 Go 语言切片(Slice) Go 语言范围(Range) Go 语言Map(集合) Go 语言递归函数 Go 语言类型转换 Go 语言接口 Go 错误处理 Go 语言开发工具Go 语言标准库

Go 语言标准库


package zlib

import "compress/zlib"

zlib包实现了对zlib格式压缩数据的读写,参见RFC 1950

本包的实现提供了在读取时解压和写入时压缩的滤镜。例如,将压缩数据写入一个bytes.Buffer:

var b bytes.Buffer
w := zlib.NewWriter(&b)
w.Write([]byte("hello, world\n"))
w.Close()

然后将数据读取回来:

r, err := zlib.NewReader(&b)
io.Copy(os.Stdout, r)
r.Close()

Go语言标准库 >>


  • Constants
  • Variables
  • func NewReader(r io.Reader) (io.ReadCloser, error)
  • func NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error)
  • type Writer
  • Examples

    Go语言标准库 >>


  • NewReader
  • NewWriter
  • Constants

    const (
        NoCompression      = flate.NoCompression
        BestSpeed          = flate.BestSpeed
        BestCompression    = flate.BestCompression
        DefaultCompression = flate.DefaultCompression
    )

    这些常量都是拷贝自flate包,因此导入"compress/zlib"后,就不必再导入"compress/flate"了。

    Variables

    var (
        // 当读取的zlib数据的校验和错误时,会返回ErrChecksum
        ErrChecksum = errors.New("zlib: invalid checksum")
        // 当读取的zlib数据的目录错误时,会返回ErrDictionary
        ErrDictionary = errors.New("zlib: invalid dictionary")
        // 当读取的zlib数据的头域错误时,会返回ErrHeader
        ErrHeader = errors.New("zlib: invalid header")
    )

    func NewReader

    func NewReader(r io.Reader) (io.ReadCloser, error)

    NewReader返回一个从r读取并解压数据的io.ReadCloser。其实现会缓冲输入流的数据,并可能从r中读取比需要的更多的数据。调用者有责任在读取完毕后调用返回值的Close方法。

    Example
    buff := []byte{120, 156, 202, 72, 205, 201, 201, 215, 81, 40, 207,
        47, 202, 73, 225, 2, 4, 0, 0, 255, 255, 33, 231, 4, 147}
    b := bytes.NewReader(buff)
    r, err := zlib.NewReader(b)
    if err != nil {
        panic(err)
    }
    io.Copy(os.Stdout, r)

    Output:

    hello, world
    

    func NewReaderDict

    func NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error)

    NewReaderDict类似NewReader,但会使用预设的字典初始化返回的Reader。

    如果压缩数据没有采用字典,本函数会忽略该参数。

    type Writer

    type Writer struct {
        // 内含隐藏或非导出字段
    }

    Writer将提供给它的数据压缩后写入下层io.Writer接口。

    func NewWriter

    func NewWriter(w io.Writer) *Writer

    NewWriter创建并返回一个Writer。写入返回值的数据都会在压缩后写入w。

    调用者有责任在结束写入后调用返回值的Close方法。因为写入的数据可能保存在缓冲中没有刷新入下层。

    Example
    var b bytes.Buffer
    w := zlib.NewWriter(&b)
    w.Write([]byte("hello, world\n"))
    w.Close()
    fmt.Println(b.Bytes())

    Output:

    [120 156 202 72 205 201 201 215 81 40 207 47 202 73 225 2 4 0 0 255 255 33 231 4 147]
    

    func NewWriterLevel

    func NewWriterLevel(w io.Writer, level int) (*Writer, error)

    NewWriterLevel类似NewWriter但指定了压缩水平而不是采用默认的DefaultCompression。

    参数level可以是DefaultCompression、NoCompression或BestSpeed与BestCompression之间包括二者的任何整数。如果level合法,返回的错误值为nil。

    func NewWriterLevelDict

    func NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error)

    NewWriterLevelDict类似NewWriterLevel但还指定了用于压缩的字典。dict参数可以为nil;否则,在返回的Writer关闭之前,其内容不可被修改。

    func (*Writer) Reset

    func (z *Writer) Reset(w io.Writer)

    Reset将w重置,丢弃当前的写入状态,并将下层输出目标设为dst。效果上等价于将w设为使用dst和w的压缩水平、字典重新调用NewWriterLevel或NewWriterLevelDict返回的*Writer。

    func (*Writer) Write

    func (z *Writer) Write(p []byte) (n int, err error)

    Write将p压缩后写入下层io.Writer接口。压缩后的数据不一定会立刻刷新,除非Writer被关闭或者显式的刷新。

    func (*Writer) Flush

    func (z *Writer) Flush() error

    Flush将缓冲中的压缩数据刷新到下层io.Writer接口中。

    func (*Writer) Close

    func (z *Writer) Close() error

    调用Close会刷新缓冲并关闭w,但不会关闭下层io.Writer接口。