在python的时候就习惯使用zlib进行网页压缩。 golang下同样使用zlib进行压缩解压缩。 zlib官方给出的方法很简单,这里权当一个补充.
zlib.NewWriter() 只能传递 []byte类型数据. NewWriterLevel 可以传递压缩的等级.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package main
import (
"bytes"
"compress/zlib"
"fmt"
"io"
)
func main() {
var in bytes. Buffer
b : = []byte(`xiorui.cc`)
w : = zlib.NewWriter(& in )
w.Write(b)
w.Close()
var out bytes. Buffer
r, _ : = zlib.NewReader(& in )
io.Copy(&out, r)
fmt.Println(out.String())
}
|
库包地址
import "compress/zlib"
写入
1
2
3
|
func NewWriter
func NewWriter(w io.Writer) *Writer
|
读取压缩的数据
1
2
3
|
func NewReader
func NewReader(r io.Reader) (io.ReadCloser, error)
|
设置压缩等级,并压缩数据
func NewWriterLevel(w io.Writer, level int) (io.WriteCloser, os.Error)
下面是几个级别.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
const (
NoCompression = 0
BestSpeed = 1
BestCompression = 9
DefaultCompression = -1
)
const (
NoCompression = flate.NoCompression
BestSpeed = flate.BestSpeed
BestCompression = flate.BestCompression
DefaultCompression = flate.DefaultCompression
)
|
写入数据
1
2
3
|
func (*Writer) Write
func (z *Writer) Write(p []byte) (n int, err error)
|
关闭
1
2
3
|
func (*Writer) Close
func (z *Writer) Close() error
|
Golang zlib压缩的效率和性能都还可以, 毕竟rsync也在用这个压缩算法。 其实zlib和gzip对比,貌似用gzip的多一点。 比如nginx的gzip压缩. 以前看过国外一个帖子,是说zlib比gzip更适合那种速度跟压缩效果均衡的场景。