Golang使用zlib压缩和解压缩字符串

在python的时候就习惯使用zlib进行网页压缩。 golang下同样使用zlib进行压缩解压缩。 zlib官方给出的方法很简单,这里权当一个补充.

文章时常有修改,更新. 标注下golang zlib原文地址, http://xiaorui.cc/?p=3084

zlib.NewWriter() 只能传递 []byte类型数据. NewWriterLevel 可以传递压缩的等级.

#xiaorui.cc
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"

写入

func NewWriter
 func NewWriter(w io.Writer) *Writer

读取压缩的数据

func NewReader
 func NewReader(r io.Reader) (io.ReadCloser, error)

设置压缩等级,并压缩数据

func NewWriterLevel(w io.Writer, level int) (io.WriteCloser, os.Error)

下面是几个级别.

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

写入数据

func (*Writer) Write
 func (z *Writer) Write(p []byte) (n int, err error)

关闭

func (*Writer) Close
 func (z *Writer) Close() error

Goang zlib压缩的效率和性能都还可以, 毕竟rsync也在用这个压缩算法。 其实zlib和gzip对比,貌似用gzip的多一点。 比如nginx的gzip压缩. 以前看过国外一个帖子,是说zlib比gzip更适合那种速度跟压缩效果均衡的场景。


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址 xiaorui.cc

发表评论 取消回复

邮箱地址不会被公开。 必填项已用*标注