Protocol Buffer使用手册

一、文件名:*.proto

二、引用其他PB文件:

import  "myprojce/other_protos.proto";

三、文件内容:

1.消息类型

message msgName{

require string query=1;

optional int32 page_number=2; }

说明:

1)一个.proto文件中可以定义多个message类型。

2)同时,如果1个.proto文件定义了多个具有不同依赖的message,会导致依赖膨胀;建议每个文件包含尽可能少的message。

2.字段类型

3.字段序号

message中的每个字段都有唯一序号。

作用:用于识别二进制message中的字段。

注意:

1)序号最小值为1,最大值为2^29-1(536870911);

2)不能使用19000~19999之间的数字,因为它们是为PB实现保留的。其中19000为FieldDescriptor::kFirstReservedNumber,19999为FieldDescriptor::kLastReservedNumber。如果使用了,PB编译器会报错;同样也不能重复使用已保留的字段序号。

3)消息已被使用后不能修改序号。

4)为频繁使用的消息成员保留字段号1~15。

编码格式:

1)1~15的序号用1个字节来编码(并包含字段序号和字段类型);

2)16~2017的序号暂用2个字节;

4.字段规则:

required:message中必有的字段

optional:message中可以有0或1个这个字段(不超过1个)

repeated:该字段在message中可以重复多次(包含0次),并保留重复值的顺序

注:该类型的字段编码效率不高,新代码需使用特殊选项[packed=true]来提高编码效率。例如:

repeated int32 samples = 4 [packed=true];

5.命名空间:

package pkg_name;

1)对于java,解析为包名;

2)对于c++,解析为namespace;

6.注释:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑白安全

C++如何调用class类中方法实现多线程编程

众所周知在使用C++创建多线程执行时只能传递一个方法到thread模块中去创建线程执行。但是有时候我们往往需要使用多线程去执行某个对象中的方法,而对象中的方法却...

742
来自专栏Python小屋

回调函数原理与Python实现

回调函数的定义与普通函数并没有本质的区别,但一般不直接调用,而是作为参数传递给另一个函数,当另一个函数中触发了某个事件、满足了某个条件时就会自动调用回调函数。下...

3698
来自专栏Python小屋

列表元素循环移位中Python切片的妙用

之前有个文章中介绍了列表循环移位的3中方法,原文请见:Python序列循环移位的3种方法 其中第二种方法虽然更直接地翻译了题目的要求,但是显得还是有点啰嗦,如...

3254
来自专栏运维技术迷

Redis全局命令

redis有5种数据结构,他们是键值对中的值,对于键来说有一些通用的命令。 查看所有键 语法:keys * [root@vultr ~]# redis-cli ...

3427
来自专栏c#开发者

[原创]PipelineTools 文件传输工具

功能模块只有 1/文件目录-〉文件目录 2/文件目录-〉MSMQ 3/MSMQ-〉MSMQ 4/MSMQ -〉文件目录 在传输MSMQ是文件不能超过4M 下载文...

3557
来自专栏破晓之歌

vuex入门,详细的讲解(小知识积累) 原

1.vuex入门,详细的讲解:https://segmentfault.com/a/1190000011716027

832
来自专栏mathor

线程的基本概念

1314
来自专栏Python攻城狮

Python-线程1.线程2.多线程-threading3.主线程会等待所有的子线程结束后才结束4.查看线程数量 5.threading注意点 6.多线程-共享全局变量 7.列表当做实参传递到线程中

thread.start_new_thread(function,args[,kwargs])

2693
来自专栏Python小屋

Python快速计算Fibonacci数列中第n项的方法

from time import time from functools import lru_cache def fibo1(n): '''递归法''' ...

3277
来自专栏我的博客

php命名空间详解

1、命名空间概述 从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,...

3238

扫码关注云+社区

领取腾讯云代金券