当前位置:  开发笔记 > 编程语言 > 正文

在Golang中遇到gzip.Reader问题

如何解决《在Golang中遇到gzip.Reader问题》经验,为你挑选了1个好方法。

为什么这不起作用?(对不起因为某些原因我无法在Go Playground上获得分享按钮).

package main

import (
    "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 07
byte buffer bb0 contains = 01 02 03 04 05 06 07
7 bytes written using gzip writer, err = 
byte buffer bb1 contains = 1f 8b 08 00 00 09 6e 88 00 ff
0 bytes copied from gzip reader, err = unexpected EOF
byte buffer bb2 contains = 

读者似乎没有做任何事情,我做错了什么?



1> Alasdair..:

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

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

或者,可能是在尝试从中读取bytes.Buffer之前需要将其设置为零,因为读者可能正在尝试从其末尾读取.

你所做的也是低效的,我建议你使用:https://github.com/AlasdairF/Custom

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有