描述:
- 地图数据本来用protobuf存储的,现在要改为用fstream来存储。本文总结了fstream的各种经验。
- protobuf最大单文件不能大于67mb
- protobuf会占用很多额外的空间,也就是probuf存出来的文件比实际需要的要大
- protobuf不方便优化存储的结构
- protobuf的好处是可以做多版本兼容,但是我们用来存储地图而不是用来作为网络数据的格式,相对格式比较固定,而且可以写格式转换程序。
- 需要存储的内容有:
- frame的各种信息(pose,gps的等)
- 特征点位置
- 描述符
- 每个特征点对应的mappoint
- mappoint的个总信息(位置)
- frame之间的共視关系
- frame的各种信息(pose,gps的等)
分析:
- 其实protobuf并不比直接fstream序列化简单多少。
- protobuf就算使用protobuf也需要把一些指针用id俩表示。
- protobuf也需要把一个一个的数据填入到对应的序列化的类里面。这个类用proto格式定义,支持的数据结构很有限。
- fstream只需要按照一定顺序把各种数据写入,在按照同样的顺序把内容读出来。
- 不要用<<符号来写入数据。<<实际是写入的text不是bianry
- 用函数来减少文件操作的复杂度,让操作和protobuf更相似
- 对于数组,先存一个数组个数,然后按顺序去数据。这个操作可以写到一个函数里面,就不用关心一个数组具体怎么被存得了。
- string也需要先存字符个个数