我正在努力将gzip Writer直接连接到gzip Reader,这样我就可以写入Writer并随时从Reader中读取.我期待读完我写的内容.我正在使用gzip,但是我也想使用这种方法和crypto/aes,我想它应该非常相似,它可以和其他读者/作者一起使用,比如jpeg,png ......
这是我最好的选择,这是行不通的,但我希望你能看出我的意思:http://play.golang.org/p/7qdUi9wwG7
package main
import (
"bytes"
"compress/gzip"
"fmt"
)
func main() {
s := []byte("Hello world!")
fmt.Printf("%s\n", s)
var b bytes.Buffer
gz := gzip.NewWriter(&b)
ungz, err := gzip.NewReader(&b)
fmt.Println("err: ", err)
gz.Write(s)
gz.Flush()
uncomp := make([]byte, 100)
n, err2 := ungz.Read(uncomp)
fmt.Println("err2: ", err2)
fmt.Println("n: ", n)
uncomp = uncomp[:n]
fmt.Printf("%s\n", uncomp)
}
Run Code Online (Sandbox Code Playgroud)
似乎gzip.NewReader(&b)是试图立即阅读并返回EOF.
你需要做两件事才能让它发挥作用
这是看起来像
func main() {
s := []byte("Hello world!")
fmt.Printf("%s\n", s)
in, out := io.Pipe()
gz := gzip.NewWriter(out)
go func() {
ungz, err := gzip.NewReader(in)
fmt.Println("err: ", err)
uncomp := make([]byte, 100)
n, err2 := ungz.Read(uncomp)
fmt.Println("err2: ", err2)
fmt.Println("n: ", n)
uncomp = uncomp[:n]
fmt.Printf("%s\n", uncomp)
}()
gz.Write(s)
gz.Flush()
}
Run Code Online (Sandbox Code Playgroud)