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

发表评论

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