-
Notifications
You must be signed in to change notification settings - Fork 148
/
Copy pathcompress_zlib.htm
150 lines (149 loc) · 12 KB
/
compress_zlib.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
<!DOCTYPE html>
<html lang="en">
<head profile="http://a9.com/-/spec/opensearch/1.1/">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="../assets/site.css" rel="stylesheet">
<title>compress/zlib</title>
</head>
<body>
<div class="container">
<h2 id="pkg-overview">package zlib</h2>
<p><code>import "compress/zlib"</code>
<p align="left">zlib包实现了对zlib格式压缩数据的读写,参见<a href="http://tools.ietf.org/html/rfc1950">RFC 1950</a>。</p>
<p align="left">本包的实现提供了在读取时解压和写入时压缩的滤镜。例如,将压缩数据写入一个bytes.Buffer:</p>
<pre>var b bytes.Buffer
w := zlib.NewWriter(&b)
w.Write([]byte("hello, world\n"))
w.Close()
</pre>
<p>然后将数据读取回来:</p>
<pre>r, err := zlib.NewReader(&b)
io.Copy(os.Stdout, r)
r.Close()</pre>
<h3 id="pkg-index" class="section-header">Index <a class="permalink" href="#pkg-index">¶</a></h3>
<a href="../main.html"><h3>返回首页</h3></a>
</br>
<li><a href="#pkg-constants">Constants</a></li>
<li><a href="#pkg-variables">Variables</a></li>
<li><a href="#NewReader">func NewReader(r io.Reader) (io.ReadCloser, error)</a></li>
<li><a href="#NewReaderDict">func NewReaderDict(r io.Reader, dict []byte) (io.ReadCloser, error)</a></li>
<li><a href="#Writer">type Writer</a></li>
<ul>
<li><a href="#NewWriter">func NewWriter(w io.Writer) *Writer</a></li>
<li><a href="#NewWriterLevel">func NewWriterLevel(w io.Writer, level int) (*Writer, error)</a></li>
<li><a href="#NewWriterLevelDict">func NewWriterLevelDict(w io.Writer, level int, dict []byte) (*Writer, error)</a></li>
<li><a href="#Writer.Close">func (z *Writer) Close() error</a></li>
<li><a href="#Writer.Flush">func (z *Writer) Flush() error</a></li>
<li><a href="#Writer.Reset">func (z *Writer) Reset(w io.Writer)</a></li>
<li><a href="#Writer.Write">func (z *Writer) Write(p []byte) (n int, err error)</a></li>
</ul>
</ul>
<h4 id="pkg-examples">Examples <a class="permalink" href="#pkg-index">¶</a></h4>
<a href="../main.html"><h3>返回首页</h3></a>
</br>
<li><a href="#example-NewReader" onclick="$('#ex-NewReader').addClass('in').removeClass('collapse').height('auto')">NewReader</a></li>
<li><a href="#example-NewWriter" onclick="$('#ex-NewWriter').addClass('in').removeClass('collapse').height('auto')">NewWriter</a></li>
</ul>
<h3 id="pkg-constants">Constants <a class="permalink" href="#pkg-index">¶</a></h3>
<pre>const (
<span id="NoCompression">NoCompression</span> = <a href="compress/flate.htm">flate</a>.<a href="compress/flate.htm#NoCompression">NoCompression</a>
<span id="BestSpeed">BestSpeed</span> = <a href="compress/flate.htm">flate</a>.<a href="compress/flate.htm#BestSpeed">BestSpeed</a>
<span id="BestCompression">BestCompression</span> = <a href="compress/flate.htm">flate</a>.<a href="compress/flate.htm#BestCompression">BestCompression</a>
<span id="DefaultCompression">DefaultCompression</span> = <a href="compress/flate.htm">flate</a>.<a href="compress/flate.htm#DefaultCompression">DefaultCompression</a>
)</pre>
<p>这些常量都是拷贝自flate包,因此导入"compress/zlib"后,就不必再导入"compress/flate"了。</p>
<h3 id="pkg-variables">Variables <a class="permalink" href="#pkg-index">¶</a></h3>
<pre>var (
<span class="com">// 当读取的zlib数据的校验和错误时,会返回ErrChecksum</span>
<span id="ErrChecksum">ErrChecksum</span> = <a href="errors.htm">errors</a>.<a href="errors.htm#New">New</a>("zlib: invalid checksum")
<span class="com">// 当读取的zlib数据的目录错误时,会返回ErrDictionary</span>
<span id="ErrDictionary">ErrDictionary</span> = <a href="errors.htm">errors</a>.<a href="errors.htm#New">New</a>("zlib: invalid dictionary")
<span class="com">// 当读取的zlib数据的头域错误时,会返回ErrHeader</span>
<span id="ErrHeader">ErrHeader</span> = <a href="errors.htm">errors</a>.<a href="errors.htm#New">New</a>("zlib: invalid header")
)</pre>
<h3 id="NewReader">func <a title="View Source" href="https://github.com/golang/go/blob/master/src/compress/zlib/reader.go?name=release#58">NewReader</a> <a class="permalink" href="#pkg-index">¶</a></h3>
<pre class="funcdecl">func NewReader(r <a href="io.htm">io</a>.<a href="io.htm#Reader">Reader</a>) (<a href="io.htm">io</a>.<a href="io.htm#ReadCloser">ReadCloser</a>, <a href="builtin.htm#error">error</a>)</pre>
<p>NewReader返回一个从r读取并解压数据的io.ReadCloser。其实现会缓冲输入流的数据,并可能从r中读取比需要的更多的数据。调用者有责任在读取完毕后调用返回值的Close方法。</p>
<div class="panel-group">
<div class="panel panel-default" id="example-NewReader">
<div class="panel-heading" onclick="document.getElementById('ex-NewReader').style.display = document.getElementById('ex-NewReader').style.display=='none'?'block':'none';">Example</div>
<div id="ex-NewReader" class="panel-collapse collapse">
<div class="panel-body">
<pre>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)</pre>
<p>Output:
<pre>hello, world
</pre>
</div>
</div>
</div>
</div>
<h3 id="NewReaderDict">func <a title="View Source" href="https://github.com/golang/go/blob/master/src/compress/zlib/reader.go?name=release#64">NewReaderDict</a> <a class="permalink" href="#pkg-index">¶</a></h3>
<pre class="funcdecl">func NewReaderDict(r <a href="io.htm">io</a>.<a href="io.htm#Reader">Reader</a>, dict []<a href="builtin.htm#byte">byte</a>) (<a href="io.htm">io</a>.<a href="io.htm#ReadCloser">ReadCloser</a>, <a href="builtin.htm#error">error</a>)</pre>
<p align="left">NewReaderDict类似NewReader,但会使用预设的字典初始化返回的Reader。</p>
<p align="left">如果压缩数据没有采用字典,本函数会忽略该参数。</p>
<h3 id="Writer">type <a title="View Source" href="https://github.com/golang/go/blob/master/src/compress/zlib/writer.go?name=release#26">Writer</a> <a class="permalink" href="#pkg-index">¶</a></h3>
<pre>type Writer struct {
<span class="com">// 内含隐藏或非导出字段</span>
}</pre>
<p>Writer将提供给它的数据压缩后写入下层io.Writer接口。</p>
<h4 id="NewWriter">func <a title="View Source" href="https://github.com/golang/go/blob/master/src/compress/zlib/writer.go?name=release#42">NewWriter</a> <a class="permalink" href="#pkg-index">¶</a></h4>
<pre class="funcdecl">func NewWriter(w <a href="io.htm">io</a>.<a href="io.htm#Writer">Writer</a>) *<a href="#Writer">Writer</a></pre>
<p align="left">NewWriter创建并返回一个Writer。写入返回值的数据都会在压缩后写入w。</p>
<p align="left">调用者有责任在结束写入后调用返回值的Close方法。因为写入的数据可能保存在缓冲中没有刷新入下层。</p>
<div class="panel-group">
<div class="panel panel-default" id="example-NewWriter">
<div class="panel-heading" onclick="document.getElementById('ex-NewWriter').style.display = document.getElementById('ex-NewWriter').style.display=='none'?'block':'none';">Example</div>
<div id="ex-NewWriter" class="panel-collapse collapse">
<div class="panel-body">
<pre>var b bytes.Buffer
w := zlib.NewWriter(&b)
w.Write([]byte("hello, world\n"))
w.Close()
fmt.Println(b.Bytes())</pre>
<p>Output:
<pre>[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]
</pre>
</div>
</div>
</div>
</div>
<h4 id="NewWriterLevel">func <a title="View Source" href="https://github.com/golang/go/blob/master/src/compress/zlib/writer.go?name=release#53">NewWriterLevel</a> <a class="permalink" href="#pkg-index">¶</a></h4>
<pre class="funcdecl">func NewWriterLevel(w <a href="io.htm">io</a>.<a href="io.htm#Writer">Writer</a>, level <a href="builtin.htm#int">int</a>) (*<a href="#Writer">Writer</a>, <a href="builtin.htm#error">error</a>)</pre>
<p align="left">NewWriterLevel类似NewWriter但指定了压缩水平而不是采用默认的DefaultCompression。</p>
<p align="left">参数level可以是DefaultCompression、NoCompression或BestSpeed与BestCompression之间包括二者的任何整数。如果level合法,返回的错误值为nil。</p>
<h4 id="NewWriterLevelDict">func <a title="View Source" href="https://github.com/golang/go/blob/master/src/compress/zlib/writer.go?name=release#62">NewWriterLevelDict</a> <a class="permalink" href="#pkg-index">¶</a></h4>
<pre class="funcdecl">func NewWriterLevelDict(w <a href="io.htm">io</a>.<a href="io.htm#Writer">Writer</a>, level <a href="builtin.htm#int">int</a>, dict []<a href="builtin.htm#byte">byte</a>) (*<a href="#Writer">Writer</a>, <a href="builtin.htm#error">error</a>)</pre>
<p>NewWriterLevelDict类似NewWriterLevel但还指定了用于压缩的字典。dict参数可以为nil;否则,在返回的Writer关闭之前,其内容不可被修改。</p>
<h4 id="Writer.Reset">func (*Writer) <a title="View Source" href="https://github.com/golang/go/blob/master/src/compress/zlib/writer.go?name=release#76">Reset</a> <a class="permalink" href="#pkg-index">¶</a></h4>
<pre class="funcdecl">func (z *<a href="#Writer">Writer</a>) Reset(w <a href="io.htm">io</a>.<a href="io.htm#Writer">Writer</a>)</pre>
<p>Reset将w重置,丢弃当前的写入状态,并将下层输出目标设为dst。效果上等价于将w设为使用dst和w的压缩水平、字典重新调用NewWriterLevel或NewWriterLevelDict返回的*Writer。</p>
<h4 id="Writer.Write">func (*Writer) <a title="View Source" href="https://github.com/golang/go/blob/master/src/compress/zlib/writer.go?name=release#146">Write</a> <a class="permalink" href="#pkg-index">¶</a></h4>
<pre class="funcdecl">func (z *<a href="#Writer">Writer</a>) Write(p []<a href="builtin.htm#byte">byte</a>) (n <a href="builtin.htm#int">int</a>, err <a href="builtin.htm#error">error</a>)</pre>
<p>Write将p压缩后写入下层io.Writer接口。压缩后的数据不一定会立刻刷新,除非Writer被关闭或者显式的刷新。</p>
<h4 id="Writer.Flush">func (*Writer) <a title="View Source" href="https://github.com/golang/go/blob/master/src/compress/zlib/writer.go?name=release#166">Flush</a> <a class="permalink" href="#pkg-index">¶</a></h4>
<pre class="funcdecl">func (z *<a href="#Writer">Writer</a>) Flush() <a href="builtin.htm#error">error</a></pre>
<p>Flush将缓冲中的压缩数据刷新到下层io.Writer接口中。</p>
<h4 id="Writer.Close">func (*Writer) <a title="View Source" href="https://github.com/golang/go/blob/master/src/compress/zlib/writer.go?name=release#179">Close</a> <a class="permalink" href="#pkg-index">¶</a></h4>
<pre class="funcdecl">func (z *<a href="#Writer">Writer</a>) Close() <a href="builtin.htm#error">error</a></pre>
<p>调用Close会刷新缓冲并关闭w,但不会关闭下层io.Writer接口。</p>
</div>
<div id="x-footer" class="clearfix">
<div class="container">
<a href="http://studygolang.com/" target="_blank">Go语言中文网</a>
<span class="text-muted">|</span> <a href="http://golang.org/" target="_blank">Go Language</a>
<span class="pull-right"><a href="#">Back to top</a></span>
</div>
</div>
<script src="../assets/jquery-2.0.3.min.js"></script>
<script src="../assets/bootstrap.min.js"></script>
<script src="../assets/site.js"></script>
</body>
</html>