0

我正在尝试将结构,或更准确地说是将结构的字节存储到磁盘。我有大量字节数据,我想压缩并存储在磁盘上并稍后恢复。这些数据对除我之外的任何其他应用程序没有任何意义。

我可以用 Gob 编码一个结构([]bytes of)并用 gzip 压缩它。我还可以解压缩结果数据。但是,当我尝试将 []byte 数据转换回失败的结构时-失败是一个奇怪的失败...不是错误,当我tmp从函数中打印出来时,我得到

tmp {A: B:0 C:0}

然而我开始的结构是

type SomeStruct struct {
    A string
    B int64
    C float64
}
var testStruct = SomeStruct{
    A: "james bond",
    B: 24,
    C: 1.234,
}

这是我的功能

func GobToStruct(binaryBytes io.Reader) (SomeStruct, error) {
    s, _ := ioutil.ReadAll(binaryBytes)
    fmt.Println("read decompressed bytes ", string(s))
    decoder := gob.NewDecoder(binaryBytes)
    var tmp SomeStruct
    if err := decoder.Decode(&tmp); err != nil {
        if err != io.EOF && err != io.ErrUnexpectedEOF {
            fmt.Println("gob failed ", err)
            return tmp, err
        }
    }
    fmt.Printf("tmp %+v\r\n", tmp)
    return tmp, nil
}

我做错了什么,以便在取消数据后我不会将数据取回?

编辑: 我已经添加了代码,因为它现在在这个要点上运行,并带有一个测试文件,该文件演示了压缩后丢失的数据

4

0 回答 0