?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
import "compress/zlib"
概述
索引
示例
打包 zlib 實(shí)現(xiàn)了讀取和寫(xiě)入zlib格式壓縮數(shù)據(jù),如 RFC 1950中所述。
實(shí)現(xiàn)提供了在讀取和壓縮期間解壓縮的過(guò)濾器。例如,要將壓縮數(shù)據(jù)寫(xiě)入緩沖區(qū):
var b bytes.Buffer w := zlib.NewWriter(&b)w.Write([]byte("hello, world\n"))w.Close()
并讀回?cái)?shù)據(jù):
r, err := zlib.NewReader(&b)io.Copy(os.Stdout, r)r.Close()
Constants(常量)
Variables(變量)
func NewReader(r io.Reader) (io.ReadCloser, error)
func NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error)
type Resetter
type Writer
func NewWriter(w io.Writer) *Writer
func NewWriterLevel(w io.Writer, level int) (*Writer, error)
func NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error)
func (z *Writer) Close() error
func (z *Writer) Flush() error
func (z *Writer) Reset(w io.Writer)
func (z *Writer) Write(p []byte) (n int, err error)
NewReader NewWriter
reader.go writer.go
這些常量是從 flate 包中復(fù)制的,因此導(dǎo)入“compress/zlib”的代碼不需要導(dǎo)入“compress/flate”。
const ( NoCompression = flate.NoCompression BestSpeed = flate.BestSpeed BestCompression = flate.BestCompression DefaultCompression = flate.DefaultCompression HuffmanOnly = flate.HuffmanOnly)
var ( // 讀取具有無(wú)效校驗(yàn)和的ZLIB數(shù)據(jù)時(shí)會(huì)返回ErrChecksum。 ErrChecksum = errors.New("zlib: invalid checksum") // 讀取具有無(wú)效字典的ZLIB數(shù)據(jù)時(shí),會(huì)返回ErrDictionary。 ErrDictionary = errors.New("zlib: invalid dictionary") // 讀取包含無(wú)效標(biāo)題的ZLIB數(shù)據(jù)時(shí),會(huì)返回ErrHeader。 ErrHeader = errors.New("zlib: invalid header"))
func NewReader(r io.Reader) (io.ReadCloser, error)
NewReader 創(chuàng)建一個(gè)新的 ReadCloser。從返回的 ReadCloser 讀取并解壓縮來(lái)自r的數(shù)據(jù)。如果 r 沒(méi)有實(shí)現(xiàn) io.ByteReader,解壓縮程序可能會(huì)讀取比r更多的數(shù)據(jù)。調(diào)用者有責(zé)任在完成時(shí)調(diào)用ReadCloser 上的 Close。
NewReader 返回的 ReadCloser 也實(shí)現(xiàn)了 Resetter。
package mainimport ("bytes""compress/zlib""io""os")func main() { 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) r.Close()}
func NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error)
NewReaderDict 與 NewReader 類似,但使用預(yù)設(shè)字典。如果壓縮數(shù)據(jù)沒(méi)有引用它,NewReaderDict 會(huì)忽略該字典。如果壓縮數(shù)據(jù)引用不同的字典,則 NewReaderDict 返回 ErrDictionary。
NewReaderDict 返回的 ReadCloser 也實(shí)現(xiàn)了 Resetter。
重置器重置由 NewReader 或 NewReaderDict 返回的 ReadCloser 以切換到新的底層 Reader。這允許重新使用 ReadCloser 而不是分配新的。
type Resetter interface { // 重置會(huì)丟棄任何緩沖數(shù)據(jù),并將重置器重置為好像它一樣 // 最新與給定的讀者初始化。 Reset(r io.Reader, dict []byte) error}
Writer 將寫(xiě)入數(shù)據(jù)的數(shù)據(jù)寫(xiě)入底層寫(xiě)入器(請(qǐng)參閱 NewWriter)。
type Writer struct { // 包含過(guò)濾或未導(dǎo)出的字段}
func NewWriter(w io.Writer) *Writer
NewWriter 創(chuàng)建一個(gè)新的 Writer。寫(xiě)入返回的 Writer 被壓縮并寫(xiě)入 w。
調(diào)用者有責(zé)任在完成時(shí)調(diào)用 WriteCloser 上的 Close。寫(xiě)入可能會(huì)被緩沖,直到關(guān)閉才會(huì)被刷新。
package mainimport ("bytes""compress/zlib""fmt")func main() {var b bytes.Buffer w := zlib.NewWriter(&b) w.Write([]byte("hello, world\n")) w.Close() fmt.Println(b.Bytes())}
func NewWriterLevel(w io.Writer, level int) (*Writer, error)
NewWriterLevel 就像 NewWriter,但指定壓縮級(jí)別而不是假設(shè) DefaultCompression。
壓縮級(jí)別可以是DefaultCompression,NoCompression, HuffmanOnly 或 BestSpeed 和 BestCompression 之間的任何整數(shù)值。如果級(jí)別有效,返回的錯(cuò)誤將為零。
func NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error)
NewWriterLevelDict 與 NewWriterLevel 類似,但指定要壓縮的字典。
字典可能是零。如果沒(méi)有,則在 Writer 關(guān)閉之前不應(yīng)修改其內(nèi)容。
func (z *Writer) Close() error
關(guān)閉Writer,將任何未寫(xiě)入的數(shù)據(jù)刷新到基礎(chǔ) io.Writer,但不關(guān)閉基礎(chǔ) io.Writer。
func (z *Writer) Flush() error
Flush Writer 到其基礎(chǔ) io.Writer。
func (z *Writer) Reset(w io.Writer)
重置清除Writer z 的狀態(tài),使其等于 NewWriterLevel 或 NewWriterLevelDict 的初始狀態(tài),并且寫(xiě)入 w。
func (z *Writer) Write(p []byte) (n int, err error)
寫(xiě)入一個(gè)壓縮形式的 p 到底層的 io.Writer 。在寫(xiě)入器關(guān)閉或明確刷新之前,壓縮的字節(jié)不一定會(huì)被刷新。