dongtiao2066 2018-06-29 16:13 采纳率: 0%
浏览 2281

出错:Golang意外的EOF

这是我的代码,我是Go新手。我试着在谷歌上搜索这个问题,但我不能完全理解它,我认为这与read()方法有关。

package main

import (
    ...
)

type compressor struct {
    content []byte
}

func (r *compressor) compress() []byte {
    ...
}

func (r *compressor) decompress() []byte {
    var buffer bytes.Buffer
    dc := flate.NewReader(&buffer)
    _, err := dc.Read(r.content)
    if err != nil {
        if err != io.EOF {
            log.Fatal(err)
        }
    }

    return buffer.Bytes()
}

func main() {
    fileName := os.Args[1]
    fmt.Println(os.Args)
    contents, err := ioutil.ReadFile(fileName)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Print("Uncompressed data: ")
    fmt.Println(len(contents))

    comp := compressor{contents}
    buffer := comp.decompress()
    fmt.Print("Uncompressed data: ")
    fmt.Println(len(comp.decompress()))

    err = ioutil.WriteFile(fileName+".decjc", buffer, 0644)
    if err != nil {
        log.Fatal(err)
    }
}

输出如下:

dylan@skynet:~/Documents/EXP/jc$ ./jc data.txt.jc

[./jc data.txt.jc]

Uncompressed data: 2364480

2018/06/29 21:41:35 unexpected EOF

  • 写回答

2条回答 默认 最新

  • dongzou1964 2018-06-29 21:10
    关注

    You got the in and outputs mixed up.

    flate.NewReader takes the compressed input as a io.Reader and it returns a io.ReadCloser that can be used to get the uncompressed output:

    func (r *compressor) decompress() []byte {
        dc := flate.NewReader(bytes.NewReader(r.content))
        defer dc.Close()
        rb, err := ioutil.ReadAll(dc)
        if err != nil {
            if err != io.EOF {
                log.Fatalf("Err %v
     read %v", err, rb)
            }
        }
        return rb
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用