来自 bytes.Reader 的 Golang un-gzip

我有一个文件结构,它包含一个主体,它只是一个*bytes.Reader我在结构上有两个方法Zip() errorUnZip() error. 当我调用Zip它时,它应该压缩将压缩数据存储在正文中的文件,并且我应该能够调用UnZip同一个文件并将解压缩的数据存储在正文中。

我在操场上的最小示例如下。https://play.golang.org/p/WmZtqtvnyN

我能够很好地压缩文件,看起来它正在做它应该做的事情;但是,当我尝试解压缩得到的文件时unexpected EOF

我已经做了几个小时了。任何帮助是极大的赞赏。


30秒到达战场
浏览 158回答 2
2回答

慕容708150

我相信您应该在从底层缓冲区获取字节之前关闭 gzip 编写器。func (f *File) Zip() error {    buff := bytes.NewBuffer(nil)    writer := gzip.NewWriter(buff)    defer writer.Close()    _, err := f.Body.WriteTo(writer)    if err != nil {        return err    }    writer.Close() // I have added this line    f.Body = bytes.NewReader(buff.Bytes())    f.Name = fmt.Sprintf("%s.gz", f.Name)    return nil}

杨__羊羊

根据文档,gzip.NewReader_If r does not also implement io.ByteReader, the decompressor may read more data than necessary from r.对于 bytes.Reader,A Reader implements the io.Reader, io.ReaderAt, io.WriterTo, io.Seeker, io.ByteScanner, and io.RuneScanner interfaces by reading from a byte slice.问题可能在于bytes.Reader没有实现io.ByteReader。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go