猿问

Go 中的透明(类似过滤器)gzip/gunzip

我正在尝试,只是为了好玩,将 gzip Writer 直接连接到 gzip Reader,这样我就可以写入 Writer 并从 Reader 动态读取。我希望能准确地阅读我写的内容。我正在使用 gzip,但我也想将这种方法与加密/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)

}

似乎gzip.NewReader(&b)正在尝试立即读取并返回 EOF。


凤凰求蛊
浏览 216回答 2
2回答

炎炎设计

使用管道。例如,包io功能管道func Pipe() (*PipeReader, *PipeWriter)Pipe创建一个同步的内存管道。它可用于将需要 io.Reader 的代码与需要 io.Writer 的代码连接起来。一端的读取与另一端的写入匹配,直接在两者之间复制数据;没有内部缓冲。并行调用 Read 和 Write 或使用 Close 是安全的。一旦挂起的 I/O 完成,关闭将完成。对 Read 的并行调用和对 Write 的并行调用也是安全的:各个调用将按顺序进行门控。
随时随地看视频慕课网APP

相关分类

Go
我要回答