PB学习

作者: celusing | 来源:发表于2020-10-10 23:14 被阅读0次

    一.定义:

    Protobuf:全称Google Protocol Buffer(简称protobuf)是一种轻便高效的结构化数据存储方式,与平台无关、语言无关、可扩展,可用于通讯协议和数据存储等领域。

    二.具体使用

    1.编写.proto文件

    1.1定义package

    相当于定义c++中的namespace

    1.2定义message

    相当于定义c++中的class

    1.3定义属性

    属性定义:标注+类型+属性名+属性顺序号+[默认值]

    1.3.1标注

    分为三种

    1)required:必选属性,message对象必须限时赋值

    2)optional:可选属性,如果不指定,则使用该类型的默认值。

    3)repeated:重复字段,类似于vector

    2.常用API

    针对不同的标注,protoc为不同属性提供了不同的方法

    1)required和option

    A.针对普通数据类型(number等)

    1⃣️:获取:TypeName xxx() const;

    2⃣️:设值:void set_xxx(const TypeName&);

    3⃣️:判断是否设值:bool has_xxx();

    4⃣️:清除(使其变为默认值):void clear_xxx();

    B.针对string类型,额外提供:

    5⃣️:多种set_方法:

    void set_xxx(const char* );

    6⃣️:提供mutable_方法,返回属性值的可修改指针

    std::string* mutable_xxx();

    备注:针对非基本数据类型,比如:类类型

    包括:1)PB本身支持的类类型(string);2)自定义的类类型:类的嵌套。都提供类似的修改方法:

    TypeName* mutable_xxx();

    2)repeated

    1⃣️:增加:TypeName* add_xxx();

    2⃣️:获取size:int xxx_size();

    3⃣️:清除:void clear_xxx();

    4⃣️:获取某一个:TypeName xxx(int  index) const;

    5⃣️:获取某一个可修改指针:TypeName* mutable_xxx(int);

    6⃣️:获取全部:RepeatedPtrField<TypeName> xxx() const;

    7⃣️:获取全部的可修改指针:RepeatedPtrField<TypeName>* mutable_xxx();

    3.序列化和反序列化API

    1⃣️:序列化到输出流中:

    bool SerializeToOstream(std::ostream* output) const

    反序列化:从输入流中解析

    bool ParseFromIstream(std::istream* input);

    2⃣️:序列化到string中:

    bool SerializeToString(string* output) const;

    反序列化:从string中解析

    bool ParseFromString(const string& data);

    3⃣️:序列化到字节流中:(最高效,最常用)

    bool SerializeToArray(void* data, int size) const;

    反序列化:从字节流解析

    备注:序列化和反序列化不一定非要配对。不配对也可以解析。

    4.message类公共的API

    生成的class继承自::google::protobuf::Message类,该基类提供了一些API:

    1⃣️:检查required变量是否都已经初始化:

    bool IsInitialized() const;

    2⃣️:清除所有成员

    void clear();

    3⃣️copy:使用新的值覆盖当前值

    void CopyFrom(const TypeName& from)

    相关文章

      网友评论

          本文标题:PB学习

          本文链接:https://www.haomeiwen.com/subject/woqspktx.html