内容简介:官方标准库对flate包的定义是:flate包实现了deflate压缩数据格式,参见这边什么是deflate?维基百科给出的解释是:
官方标准库对flate包的定义是:flate包实现了deflate压缩数据格式,参见 RFC 1951 。gzip包和zlib包实现了对基于deflate的文件格式的访问。
这边什么是deflate?
维基百科给出的解释是: DEFLATE 是同时使用了 LZ77 算法与 哈夫曼编码 (Huffman Coding)的一个 无损数据压缩 算法 。它最初是由 菲尔·卡茨 (Phil Katz)为他的 PKZIP 软件第二版所定义的,后来被 RFC 1951 标准化。
const ( NoCompression = 0 // 不压缩 BestSpeed = 1 // 最快速度压缩 BestCompression = 9 // 最佳压缩比压缩 DefaultCompression = -1 // 默认压缩 )
1)func NewReader(r io.Reader) io.ReadCloser
参数列表:r deflate压缩文件的文件标识符 返回值:解压后的ReadCloser数据 功能说明:从r读取deflate压缩数据,返回一个解压过的io.ReadCloser,使用后需要调用关闭该io.ReadCloser demo: package main import ( "bytes" "compress/flate" "log" "fmt" "io" "os" ) func main() { // 一个缓存区压缩的内容 buf := bytes.NewBuffer(nil) // 创建一个flate.Writer flateWrite, err := flate.NewWriter(buf, flate.BestCompression) if err != nil { log.Fatalln(err) } defer flateWrite.Close() // 写入待压缩内容 flateWrite.Write([]byte("compress/flate\n")) flateWrite.Flush() fmt.Printf("压缩后的内容:%s\n", buf) // 解压刚压缩的内容 flateReader := flate.NewReader(buf) defer flateWrite.Close() // 输出 fmt.Print("解压后的内容:") io.Copy(os.Stdout, flateReader) }
2)func NewReaderDict(r io.Reader, dict []byte) io.ReadCloser
参数列表: r deflate压缩的数据 dict 解压数据时预设的字典,和NewWriteDict函数里得dict相同 返回值:解压后ReadCloser数据 功能说明:从r读取deflate压缩数据,使用预设得dict字典压缩数据,返回一个压缩过得io.ReadCloser,使用后需要调用者关闭该io.ReadCloser。主要用来读取NewWriteDict压缩的数据 demo: package main import ( "bytes" "compress/flate" "log" "fmt" "io" "os" ) func main() { // 一个缓冲区存储压缩的内容 buf := bytes.NewBuffer(nil) // 创建一个flate.Write flateWrite, err := flate.NewWriterDict(buf, flate.BestCompression, []byte("key")) if err != nil { log.Fatalln(err) } defer flateWrite.Close() // 写入待压缩内容 flateWrite.Write([]byte("compress/flate\n")) flateWrite.Flush() fmt.Println(buf) // 解压刚压缩的内容 flateReader := flate.NewReaderDict(buf, []byte("key")) defer flateReader.Close() // 输出 io.Copy(os.Stdout, flateReader) }
3)func NewWrite(w io.Write, level int) (*Write, error)
参数列表: 1)w 表示输出数据的Write 2)level 表示压缩级别 返回列表: 1)*Write 基于压缩级别新生成的压缩数据的Writer 2)error 表示该函数的错误信息 功能说明: 该函数返回一个压缩级别为level的新的压缩用的Writer,压缩级别的范围时1(BestSpeed)to 9(BestCompression)。压缩效果越好的意味着压缩速度越慢。0(NoCompression)表示不做任何压缩;仅仅只需要添加必要的deflate信息,-1(DefaultCompression)表示用默认的压缩级别。如果压缩级别在-1~9的范围内,error返回nil,否则将返回非nil的错误信息。 demo: package main import ( "bytes" "compress/flate" "log" "fmt" ) func main() { // 一个缓冲区压缩的内容 buf := bytes.NewBuffer(nil) // 创建一个flate.Writer,压缩级别最好 flateWrite, err := flate.NewWriter(buf, flate.BestCompression) if err != nil { log.Fatalln(err) } defer flateWrite.Close() // 写入待压缩内容 flateWrite.Write([]byte("compress/flate\n")) flateWrite.Flush() fmt.Println(buf) }
4)func NewWriteDict(w io.Writer, level int, dict []byte) (*Writer, error)
参数列表: 1)w 代表输出数据的Writer 2)level 代表压缩级别 3)dict 代表压缩预设字典 返回列表: 1)*Writer 基于压缩级别和预设字典新生成的压缩数据的Writer 2)error 该函数的错误信息 功能说明: 该函数和NewWriter差不多,只不过使用了预设字典进行初始化Writer。使用该Writer压缩的数据只能被使用相同字典初始化的Reader解压。可以实现基于密码的解压缩。 demo: package main import ( "bytes" "compress/flate" "log" "fmt" ) func main() { // 一个缓冲区存储压缩的内容 buf := bytes.NewBuffer(nil) // 创建一个flate.Writer,压缩级别最好 flateWriter, err := flate.NewWriterDict(buf, flate.BestCompression, []byte("key")) if err != nil { log.Fatalln(err) } defer flateWriter.Close() // 写入待压缩内容 flateWriter.Write([]byte("compress/flate\n")) flateWriter.Flush() fmt.Println(buf) }
5)func (e InternalError) Error() string
返回值:表示flate数据自身的错误信息 功能说明:InternalError其实是一个string,他实现了error接口,用于很方便的返回flate数据自身的错误信息
6)func (e *ReadError) Error() string
返回值:表示flate读取拷贝数据时的错误信息 功能说明:ReadError其实是一个struct,他实现了error接口,用于很方便的返回flate读取拷贝数据时的错误信息
7)func (e *WriteError) Error() string
返回值:表示flate输出数据的错误信息 功能说明:WriteError是一个struct,他实现了error接口,用于很方便的返回flate输出数据的错误信息
8)func (w *Writer) Close() error
返回值:返回一个error,没有错误时返回nil 功能说明:刷新缓冲并关闭w
9)func (w *Writer) Flush() error
返回值:返回一个error,没有错误时该error为nil 功能说明:Flush将缓存中的压缩数据刷新到下层的io.writer中。它主要用在压缩的网络协议中,目的时确保远程读取器有足够的数据重建一个数据包。Flush是阻塞的,直到缓冲中的数据都被写入到下层io.writer中才返回。如果下层io.writer返回一个error,那么Flush也会返回该error。 在zlib库的术语中,Flush等同于Z_SYNC_FLUSH。
9)func (w *Writer) Reset(dst io.Writer)
参数列表: 1)dst 重置时将为作w的下层io.Writer 功能说明: Reset会丢弃现在w的状态,这相当于把dst、w的级别和字典作为参数,重新调用NewWriter或者NewWriterDict函数一样。
10)func (w *Writer) Write(data []byte) (n int, err error)
参数列表: 1)data 代表要写入的字节数据 返回值: 1)n 写入的字节数 2)err 错误信息,无错误返回nil 功能说明: Write向w写入数据,最终会将压缩格数的数据写入到w的下层io.Writer中
非常好的一个资源链接: https://github.com/astaxie/gopkg/tree/master/compress/flate
如果有很好的资源,欢迎在评论区留言分享
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
图论——一个迷人的世界
本杰明,查特兰,张萍 / 机械工业出版社 / 2001-1-1
本书介绍了图论的基本概念,解释了图论中各种经典问题。例如,熄灯的问题、小生成树问题、哥尼斯堡七桥问题、中国邮递员问题、国际象棋中马的遍历问题和路的着色问题等等。书中也给出了各种类型的图,例如,二部图、欧拉图、彼得森图和树;等等。每一章都为读者设置了练习题,包含了具有挑战性的探索性问题。一起来看看 《图论——一个迷人的世界》 这本书的介绍吧!