flate

优质
小牛编辑
135浏览
2023-12-01

import "compress/flate"

flate包实现了deflate压缩数据格式,参见RFC 1951。gzip包和zlib包实现了对基于deflate的文件格式的访问。

const (
    NoCompression = 0
    BestSpeed     = 1
    BestCompression    = 9
    DefaultCompression = -1
)

type CorruptInputError

type CorruptInputError int64

CorruptInputError表示在输入的指定偏移量位置存在损坏。

func (CorruptInputError) Error

func (e CorruptInputError) Error() string

type InternalError

type InternalError string

InternalError表示flate数据自身的错误。

func (InternalError) Error

func (e InternalError) Error() string

type ReadError

type ReadError struct {
    Offset int64 // 错误出现的位置(字节偏移量)
    Err    error // 下层的读取操作返回的错误
}

ReadError代表在读取输入流时遇到的错误。

func (*ReadError) Error

func (e *ReadError) Error() string

type WriteError

type WriteError struct {
    Offset int64 // 错误出现的位置(字节偏移量)
    Err    error // 下层的写入操作返回的错误
}

WriteError代表在写入输出流时遇到的错误。

func (*WriteError) Error

func (e *WriteError) Error() string

type Reader

type Reader interface {
    io.Reader
    io.ByteReader
}

NewReader真正需要的接口。如果提供的Io.Reader没有提供ReadByte方法,NewReader函数会自行添加缓冲。

func NewReader

func NewReader(r io.Reader) io.ReadCloser

NewReader返回一个从r读取并解压数据的io.ReadCloser。调用者有责任在读取完毕后调用返回值的Close方法。

func NewReaderDict

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

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

返回的Reader表现的好像原始未压缩的数据流以该字典起始(并已经被读取)。NewReaderDict用于读取NewWriterDict压缩的数据。

type Writer

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

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

func NewWriter

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

NewWriter返回一个压缩水平为level的Writer。

和zlib包一样,level的范围是1(BestSpeed)到9 (BestCompression)。值越大,压缩效果越好,但也越慢;level为0表示不尝试做任何压缩,只添加必需的deflate框架;level为-1时会使用默认的压缩水平;如果level在[-1, 9]范围内,error返回值将是nil,否则将返回非nil的错误值。

func NewWriterDict

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

NewWriterDict类似NewWriter,但会使用预设的字典初始化返回的Writer。

返回的Writer表现的好像已经将原始、未压缩数据dict(压缩后未产生任何数据的)写入w了,使用w压缩的数据只能被使用同样的字典初始化生成的Reader接口解压缩。(类似加解密的初始向量/密钥)

func (*Writer) Reset

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

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

func (*Writer) Write

func (w *Writer) Write(data []byte) (n int, err error)

Write向w写入数据,最终会将压缩后的数据写入下层io.Writer接口。

func (*Writer) Flush

func (w *Writer) Flush() error

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

本方法主要用在传输压缩数据的网络连接中,以保证远端的接收者可以获得足够的数据来重构数据报。Flush会阻塞直到所有缓冲中的数据都写入下层io.Writer接口后才返回。如果下层的io.Writetr接口返回一个错误,Flush也会返回该错误。在zlib包的术语中,Flush方法等价于Z_SYNC_FLUSH。

func (*Writer) Close

func (w *Writer) Close() error

Close刷新缓冲并关闭w。