为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中使用 gzip.Reader 时遇到问题

在 Golang 中使用 gzip.Reader 时遇到问题

Go
绝地无双 2021-11-29 16:17:03
为什么这不起作用?(抱歉,由于某种原因,我无法在 Go Playground 上获得分享按钮)。package mainimport (    "bytes"    "compress/gzip"    "fmt"    "io")func main() {    // ENCODE    data := []byte{1, 2, 3, 4, 5, 6, 7}    bb0 := bytes.NewBuffer(data)    byts := bb0.Bytes()    fmt.Printf("data = % x\n", data)    fmt.Printf("byte buffer bb0 contains = % x\n", byts)    bb1 := new(bytes.Buffer)    w := gzip.NewWriter(bb1)    s1, err := w.Write(byts)    fmt.Printf("%d bytes written using gzip writer, err = %v\n", s1, err)    byts = bb1.Bytes()    fmt.Printf("byte buffer bb1 contains = % x\n", byts)    // DECODE    r, err := gzip.NewReader(bb1)    bb2 := new(bytes.Buffer)    s2, err := io.Copy(bb2, r)    r.Close()    fmt.Printf("%d bytes copied from gzip reader, err = %v\n", s2, err)    byts = bb2.Bytes()    fmt.Printf("byte buffer bb2 contains = % x\n", byts)}我得到的输出data = 01 02 03 04 05 06 07byte buffer bb0 contains = 01 02 03 04 05 06 077 bytes written using gzip writer, err = <nil>byte buffer bb1 contains = 1f 8b 08 00 00 09 6e 88 00 ff0 bytes copied from gzip reader, err = unexpected EOFbyte buffer bb2 contains = 读者似乎什么都没做,我做错了什么?
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

可能它不起作用,因为您没有关闭 gzip 编写器,因此 gzip 压缩的数据从未刷新到底层编写器(为此您使用的是 bytes.Buffer),或者至少它没有最终确定。

w.Close()写完后你需要gzip writer。

或者,可能是在尝试读取 bytes.Buffer 之前需要将其查找为零,因为读取器可能试图从它的末尾读取。

另外你在做什么效率低下,我建议你使用:https : //github.com/AlasdairF/Custom


查看完整回答
反对 回复 2021-11-29
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信