序列化与反序列化主要用于解决在跨平台和跨语言的情况下模块之间交互和调用
1.优缺点:
protobuf:
优:序列化之后的数据为二进制字符串,防止信息泄露,序列化完的字符串包较小,序列化效率高只需要使用protobuf对结构数据进行一次描述,即可从各种数据流中读取结构数据,更新数据结构时不会破坏原有的程序。
缺:自解释性较差,数据存储格式为二进制,需要通过 .proto 文件才能了解到内部的数据结构;
不适合用来对 基于文本的标记文档(如HTML) 建模。
json:
缺:压缩完数据较大、压缩效率低
2.proto的使用流程:
syntax="proto3"->设置protobuf的版本
提供的序列化和反序列化的API接口函数
class MessageLite {
public:
//序列化:
bool SerializeToOstream(ostream* output) const;
bool SerializeToArray(void *data, int size) const;
bool SerializeToString(string* output) const;
//反序列化:
bool ParseFromIstream(istream* input);
bool ParseFromArray(const void* data, int size);
bool ParseFromString(const string& data);
};