Probuf定义详解

定义一个消息类型

message SearchRequst{ //搜素请求消息
	required string query = 1; //query字段,string类型,
	optional int32 page_number =2;
	optional int32 result_per_page = 3;

	//optional 可选; required 必须有
}

指定字段类型

所有字段都是标量类型

integers: page_number 和 result_per_page

string:query

还可以指定其他指定符合类型。

枚举类型() 和其他消息类型

指定字段规则

消息字段三种规则:

required:完整的消息内必须拥有此字段。此字段必须拥有(使用双方)

optional:完整的消息内此字段可选,可拥有可以没有(使用双方可选)

repeated:完整的消息内此字段的值可以拥有任意个,重复的值的次数会保存下来

分配指定标签号

每个字段都有一个唯一的数字标签,表示字段在二进制中的位置,使用过程不能更改

标签号范围:

1-15 一个字节标记

16-2047 两个字节标记

最小为1 最大为 2^29 -1 或者536870911 不能使用19000-19999的标签号

.proto文件会生成什么?

序列化到输出流

输入流反序列化

c++编译器会生成对应的.h和.cc文件 每个消息都有独立的操作类

java编译器会生成一个.java文件和一个操作类,此操作类所有消息类型共有,使用一个特有的Builder类为每个消息类型实例化

标量值类型

一个消息的字段如果使用标量可使之为以下类型-这个表格显示了在.proto文件内可以指定的类型与自动生成的相对类型

 

java的标量值类型: float,int,long,boolean,string ,unicode

optional 字段与其默认值

消息中被optional标识的字段不存在,会被解析为其相对应的字段设置为其字段的默认值

1、字符串:空字符串

2、bool:false

3、数字类型:0

4、枚举类型:第一个枚举类型

枚举值

message SearchRequst{ //搜素请求消息
	required string query = 1; //query字段,string类型,
	optional int32 page_number =2;
	optional int32 result_per_page = 3 [default = 10];

	enum Corpus{
        UNIVERSAL = 0;
	    WEB = 1;
	    IMAGES =2 ;
	    LOCAL = 3;
	    PRODUCTS = 4;
	    VIDEO = 5;
    }
	optional Corpus corpus = 4 [default = UNIVERSAL];//指定枚举类型与其可能的值

	//optional 可选; required 必须有
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值