读写接口

针对一些输入/输出的场景,通常可能会涉及到读/写操做。好比,对一段字符串进行gzip压缩,或者解压缩,golang下主要经过两个接口来实现:golang

读的接口声明以下:函数

type Reader interface {
	Read(p []byte) (n int, err error)
}

写接口声明以下:code

type Writer interface {
	Write(p []byte) (n int, err error)
}

结合compress/gzip包,咱们来了解一下这两个接口。gzip中包括两个功能:压缩和解压缩。对象

解压缩的状况,gzip提供了gzip.Reader对象,用来从压缩的内容中读区被压缩前的原始内容。对象的建立函数以下:接口

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

压缩的状况也相似:ip

func NewWriter(w io.Writer) *Writer

对一个被gzip压缩的字符串,该如何转换为io.Reader/io.Writer呢? bytes包提供了Buffer对象,就实现了这两个接口。字符串

拿压缩的状况j举例:string

func gzip(src string) string {
	srcBuffer := bytes.NewBuffer()
	gzipWriter := gzip.NewWriter([]byte(src))
	gzipWriter.Close()
	
	return srcBuffer.String()
}
相关文章
相关标签/搜索