美文网首页
protobuf 学习

protobuf 学习

作者: Zz鱼丸 | 来源:发表于2018-09-27 15:34 被阅读0次

syntax="proto2";               指明编译器版本(最新的版本为v3)
package name;                类似c++中的namespace
import "src/help.proto";           导入外部proto
message                    Protobuf中的结构化数据,类似于C++中的class

protobuf一共有三个字段修饰符:
  - required:该值是必须要设置的;
  - optional :该字段可以有0个或1个值(不超过1个);
  - repeated:该字段可以重复任意多次(包括0次),类似于C++中的list;

常用API

protoc为message的每个required字段和optional字段都定义了以下几个函数

1 TypeName xxx() const;          //获取字段的值
2 bool has_xxx();              //对于可选成员,判断是否设值
3 void set_xxx(const TypeName&);   //设值
4 void clear_xxx();          //使其变为默认值

为每个repeated字段定义了以下几个:

1 TypeName* add_xxx();        //增加结点
2 TypeName xxx(int) const;    //获取指定序号的结点,类似于C++的"[]"运算符
3 TypeName* mutable_xxx(int); //类似于上一个,但是获取的是指针
4 int xxx_size();            //获取结点的数量

几个是常用的序列化函数:

1 bool SerializeToOstream(std::ostream * output) const; //输出到输出流中
2 bool SerializeToString(string * output) const;        //输出到string
3 bool SerializeToArray(void * data, int size) const;   //输出到字节流

与之对应的反序列化函数:

1 bool ParseFromIstream(std::istream * input);     //从输入流解析
2 bool ParseFromString(const string & data);       //从string解析
3 bool ParseFromArray(const void * data, int size); //从字节流解析

其他常用的函数:

1 bool IsInitialized();    //检查是否所有required字段都被设值
2 size_t ByteSize() const; //获取二进制字节序的大小
proto类型 C++类型 备注
double double
float float
int32 int32 使用可变长编码,编码负数时不够高效——如果字段可能含有负数,请使用sint32
int64 int64 使用可变长编码,编码负数时不够高效——如果字段可能含有负数,请使用sint64
uint32 uint32 使用可变长编码
uint64 uint64 使用可变长编码
sint32 int32 使用可变长编码,有符号的整型值,编码时比通常的int32高效
sint64 int64 使用可变长编码,有符号的整型值,编码时比通常的int64高效
fixed32 uint32 总是4个字节,如果数值总是比总是比228大的话,这个类型会比uint32高效
fixed64 uint64 总是8个字节,如果数值总是比总是比256大的话,这个类型会比uint64高效
sfixed32 int32 总是4个字节
sfixed64 int64 总是8个字节
bool bool
string string 一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本
bytes string 可能包含任意顺序的字节数据

相关文章

  • #ProtoBuf学习了解

    ProtoBuf 最近看书,看到了Protobuf概念,今天学习了解下 什么是Protobuf 官方给出的解释:P...

  • ProtoBuf 懒人插件

    插件由来 之前在学习GRPC 微服务开发时,学习到了ProtoBuf 这个序列化协议,但是ProtoBuf 编译的...

  • Protobuf学习

    Protobuf是什么 Protobuf是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于...

  • protobuf 学习

    syntax="proto2";               指明编译器版本(最新的版本为v3)pack...

  • protobuf学习

    1.高效的数据压缩编码方式 Protobuf

  • Protobuf学习

    什么是 Protobuf Protobuf是Protocol Buffers的简称,它是Google公司开发的一种...

  • Google Protocol buffer 学习笔记.上篇-简

    本次分上下两篇简单记录自己对protobuf协议的学习笔记, 上篇简单介绍protobuf, 记录了ubuntu系...

  • Python使用protobuf极简例子

    下载安装 首先,可以直接到protobuf官网阅读学习,到protobuf的github下载编译器。对于非c++用...

  • Protobuf 学习笔记

    文章内容源自Google官方文档翻译,详见原文Language Guide。部分内容可能重复,望多见谅。 假设你想...

  • Protobuf学习记录

    简介 protoBuf是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言...

网友评论

      本文标题:protobuf 学习

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