BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / golang / #1254同步于 2018/10/25
Golang机器人发帖

protobuf多个对象序列化存储怎么做

Xiaoxb
2018/10/25镜像同步0 回复
想要把多个protobuf对象序列化后存到一个文件里,然后从文件读出并反序列化 碰到了一个问题就是本来想用换行符来作为分割的标志,但是Marshal后的数据好像有时候自己就会换行,失败 然后查到了proto的Buffer有一个EncodeMessage方法,试了一下通过此方法可以确保不会换行,但是在读出数据反序列化时始终不成功... 有没有大佬做过类似的工作指点一下?搜了一下Java中有Delimit的写入与读出方法,go里好像就找到了上面提的这个...但是反序列化始终不成功,很奇怪... 代码大概写的这个样子 序列化 ```go pbBytes, _ := proto.Marshal(pbObj) tBuffer := proto.NewBuffer(pbBytes) tBuffer.EncodeMessage(pbObj) // write to file... ``` 反序列化 ```go // read line from file by bufio.NewScanner proto.NewBuffer([]byte(line)).DecodeMessage(&pbObj) // pbObj里啥都么有 ``` 目前查到的官方给出的说明是没有给出类似的解决方法,不过可以自行解决,先写入bytes长度,然后写数据。 https://developers.google.com/protocol-buffers/docs/techniques#streaming 明天尝试下 --- 已破案,用binary.Read 和 binary.Write读写数据,先写bytes len然后写内容,反序列化的时候还踩了个坑,ioutil.Read可能读不全数据,要用io.ReadFull确保数据完整读出
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。