使用cap'原型读取数据时获取EOF

时间:2018-06-08 19:11:55

标签: go capnproto badgerdb

步骤:

func viewAll(db *badger.DB) {
txn := db.NewTransaction(false)
defer txn.Discard()
iterOpts := badger.IteratorOptions{false, 0, false, true}
itr := txn.NewIterator(iterOpts)
defer itr.Close()
b := state.NewBucket(state.BucketRecords)
multiBuffer := capn.NewSingleSegmentMultiBuffer()
for itr.Seek(b.NewKey(nil).Bytes()); itr.Valid(); itr.Next() {
    value, err := itr.Item().Value()
    if err != nil {
        log.Fatalln(err)
    }

    read, err := capn.ReadFromMemoryZeroCopyNoAlloc(value, multiBuffer)
    if err != nil {
        log.Fatalln(err) // EOF error
    } else if read != int64(len(value)) {
        panic(fmt.Sprintf("wrong read: %d != %d", read, len(value)))
    }
    vv := proto.ReadRootRecord(multiBuffer.Segments[0])
    out, err := vv.MarshalCapLit()
    if err != nil {
        log.Fatalln(err)
    }
    err = ioutil.WriteFile("cmd/db/content.out", out, 0777|os.ModeAppend)
    if err != nil {
        log.Fatalln("toFile", err)
    }
}

}

结果:

EOF

结果 content.out 仅包含第一个(可能是第一个)数据块。我究竟做错了什么?谢谢!

没有详细信息。

0 个答案:

没有答案