Голанг неожиданный EOF - PullRequest
       11

Голанг неожиданный EOF

0 голосов
/ 29 июня 2018

Вот мой код, я новичок в 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]

Несжатые данные: 2364480

2018/06/29 21:41:35 неожиданный EOF

1 Ответ

0 голосов
/ 30 июня 2018

Вы перепутали вход и выход.

flate.NewReader принимает сжатый ввод как io.Reader и возвращает io.ReadCloser, который можно использовать для получения несжатого вывода:

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\n read %v", err, rb)
        }
    }
    return rb
}
...