protocol buffer相关

protocol buffer简介

    protocol buffer全称Google Protocol Buffers,是google开发的一套用于数据存储,网络通信的协议编解码的工具库,与XML或者JSON相差不多,即把某种数据结构的信息,以某种格式(XML,JSON)保存起来,但是protobuf与XML和JSON不同在于,protobuf是基于二进制的。与XML和JSON的性能相别则是不言而喻的。 关于相关的性能对比可以看这里。

protocol buffer版本比较

Protobuf目前为止有两个版本,proto2和proto3,proto3与proto2相比支持更多语言,更加简介,去掉了一些复杂的语法与特性,,更强调约定而弱化语法。

  • 在第一行非空白非注释行写入syntax = "proto3";则表明此protobuf文件为proto3版本,如果不写入,或者写入syntax="proto2";则表示此protobuf文件为proto2版本;
  • 字段规则移除了"required",并把"optional"改名为 "singular", 在 proto2 中required是不推荐使用的,proto3则直接从语法层面上移除了required规则;
  • 移除了default选项,在proto2中,可用default选项为某一字段指定默认值,而在proto3中,字段的默认值只能根据字段类型由系统决定;
  • 移除了对扩展的支持,新增了 Any 类型;

Proto2语法格式

如下proto文件

syntax = "proto2";

package msg;

 

message CS_PlayerLogin{

    required string account=1;

    required string pwd=2;

}

message SC_PlayerLogin{

    //0成功 1账号错误 2密码错误

    required sint32 result=1;

    required uint64 playerId=2;

  • syntax = "proto2";对应的proto版本;
  • package msg;对应的包名;
  • message:定义消息类型;消息中的每个字段可有三个选项(required,optional,repeated)
    • required:必填字段;
    • optional:选填字段,不填就会使用默认值,默认数值类型的默认值为0,string类型为空字符串,枚举类型为第一个枚举值;
    • repeated:数组类型,可以放入多个类型实例。

之后再跟上数据类型,数据类型之后为字段名字,最后再跟上"=N",此处N是标志位,每个字段都有标志位,各个标志位不能重复且为正整数,其最大值为 2^29 - 1,同时protobuf内部预留了19000到19999不能被用户使用,官方建议将常用的字段放在前面,由于这个字段的大小随着数值大小增加,如1-16只占用一个字节(推荐消息字段个数不多余16个)。最后可以跟上自定义的默认值。

  • 在一个proto文件中可以存放多个message,message内部也可以定义message,外部如需调用需要指明对应的层级关系。同时可以使用import引入外部的proto文件:

    import "person.proto";

    //引入外部proto文件,并让引入了该文件的proto文件也能访问被引入类型。

    import public "person.proto";

protocol buffer基本数据类型

protocol buffer的常用基础数据类型:

数据类型

描述

字节个数

C#语言映射

bool

布尔类型

1

bool

double

64位浮点数

N

double

float

32为浮点数

N

float

int32

32位整数

N

int

uin32

无符号32位整数

N

uint

int64

64位整数

N

long

uint64

64为无符号整

N

ulong

sint32

32位整数,处理负数效率更高

N

int

sing64

64位整数 处理负数效率更高

N

long

fixed32

32位无符号整数

4

uint

fixed64

64位无符号整数

8

ulong

sfixed32

32位整数、能以更高的效率处理负数

4

uint

sfixed64

64为整数

8

ulong

string

只能处理 ASCII字符

N

string

bytes

用于处理多字节的语言字符、如中文

N

string

enum

可以包含一个用户自定义的枚举类型uint32

N(uint32)

enum

message

可以包含一个用户自定义的消息类型

N

object of class

map

键值对,键可使用string或数值类型

N

Dictionary

  • N表示打包的字节个数并不固定,取决于数据的大小;

转载于:https://www.cnblogs.com/Yellow0-0River/p/8387729.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用肖像画追踪历史上的信任度变化 |《自然-通讯》论文

来源:Nature自然科研《自然-通讯》发表的一项研究Tracking historical changes in trustworthiness using machine learning analyses of facial cues in paintings指出,从1500年到2000年,欧洲肖像画中传递信任度的面部表达有所增加&#xff…

python url中传递中文_Python编程:URL网址链接中的中文编码与解码

网址链接中的中文编码中文的gbk(GB2312)编码: 一个汉字对应两组%xx,即%xx%xx中文的UTF-8编码: 一个汉字对应三组%xx,即%xx%xx%xx可以利用百度进行URL编码解码 默认gbkhttps://www.baidu.com/s?wd%E4%B8%AD%E5%9B%BDpython3编码解…

华为:求生存是当前主线 下阶段重点 to B数字化

作者 | 王刚出品 | 雷锋网产业组华为全联接(HUAWEI CONNECT )是华为自办、规模最大的面向ICT行业的全球生态大会,今年是第五载。 这里一直是华为公司发布重大战略的平台。 过去在这个舞台上,华为呼吁过全球伙伴共建哥斯达黎加式生…

maven java管理_java – 依赖管理与maven

我最近成了Maven的大粉丝,用于控制我的应用程序的构建周期.然而,我遇到了一些粗暴的边缘与Maven的依赖管理.我想知道这些是否是工具和范例的限制,依赖管理的必要的邪恶,或者我是否使用错误的工具.>首先是传递依赖关系的问题.据了解,如果您提供依赖关系,Maven将依次找到依赖关…

发新款电池!成本降低14%,特斯拉会继续降价吗?

来源:网易智能在美国当地时间周二举行的“电池日”活动上,电动汽车制造商特斯拉公布了其“无极耳电极”电池计划(极耳是电池正极突出的那一小块),可以提高电动汽车的续航里程和功率。特斯拉将在内部生产新电池,其首席执行官埃隆马…

[并查集][排序][dfs][启发式合并] JZOJ P3635 Peaks

Description 有一个居住在多山岛屿的登山家,已经攀上了一座山峰,并且要攀爬另外一座更高的山峰。 更精确地说,岛上的每一点都有一个大于零的海拔(海面的海拔为零),并且如果登山家位于海拔Ei的山峰上&#x…

华为汪涛:打造全场景智能联接解决方案,共建行业智能体

来源:华为2020年9月24日,在HUAWEI CONNECT 2020期间,华为全面阐述全场景智能联接解决方案,从技术、网络、行业三个层面打造泛在千兆、确定性体验和超自动化的智能联接,共建行业智能体。同时,华为面向企业发…

斐波那契数java实现_斐波那契数列Java实现[剑指offer]

描述大家都知道斐波那契数列&#xff0c;现在要求输入一个整数n&#xff0c;请你输出斐波那契数列的第n项(从0开始&#xff0c;第0项为0)。n<39题解1.递归实现采用递归的方式进行实现时&#xff0c;从第n个节点向下递归时&#xff0c;存在重复节点&#xff0c;当n越大时&…

Oracle IMPDP

1.授权IMP_FULL_DATABASEgrant imp_full_database to ygqd; 2.将作业参数存储在一个参数文件中dp_ygqd.pardirectoryYGQD_PUMPdumpfileYGQD.dmpcontentmetadata_only3.启动导入作业 impdp ygqd/ygqd parfiledp_ygqd.par 4.停止和重启正在运行的作业关闭窗口&#xff1a;CtrlC退…

Facebook发布AR眼镜研究项目Project Aria

Facebook来源&#xff1a;IEEE电气电子工程师近日&#xff0c;在Oculus Connect直播活动中&#xff0c;Facebook宣布了Aria项目&#xff0c;这是一个专注于构建可穿戴增强现实设备的研究项目。但这些智能眼镜更像是一个研究平台&#xff0c;而不是为消费者提供的现成的小玩意。…

java 随机生成图,Java中的快速实值随机生成器

java.util.Random.nextDouble() is slow for me and I need something really fast.I did some google search and Ive found only integers based fast random generators. Is here anything for real numbers from interval <0, 1) ?解决方案If you need something fast …

isinstance函数

最近学习python涉及到两个函数&#xff1a; if isinstance(str,bs4.element.Tag): 一个是isinstance函数&#xff0c;一个是bs4.element.Tag 1.isinstance:判断一个对象是否是一个已知的类型&#xff0c;类似于type&#xff08;&#xff09; type&#xff08;&#xff09;不考虑…

博士发公众号文章也能评国奖?双一流高校新规引热议!

来源&#xff1a; 募格学术本文为募格学术撰写。参考资料&#xff1a;南京大学官网、百度百科、知乎、中央广电总台中国之声等。作为研究生来说&#xff0c;如果能在读研期间获得国家奖学金&#xff0c;是一项莫大的荣誉。不过一般&#xff0c;国家奖学金的申请条件要求都比较高…

新视窗java_《计算机组成原理实验》教学大纲 - 兰州大学信息科学与工程学院.DOC...

《计算机组成原理实验》教学大纲 - 兰州大学信息科学与工程学院目 录《C课程设计》教学大纲1《C语言课程设计》教学大纲3《C语言课程设计》教学大纲5《Java EE 编程思想课程设计》教学大纲7《JAVA语言课程设计》教学大纲9《JAVA语言课程设计》教学大纲11《编译原理课程设计》教…

java EL表达式中${param.name}详细

在浏览器地址输入&#xff0c;表示传入一个参数test&#xff0c;值为123URL:http://localhost:8888/Test/index.jsp?test123<body>${test}${requestScope.test} <%request.getAttribute("test"); %> </body> 以上代码均不能取出值 仅当 使用 <…

世界的下一个主宰——人工智能

一、人工智能的诞生及发展艾伦图灵是英国数学家、逻辑学家、密码学家&#xff0c;对计算机科学的发展具有重大影响。他于1936 年提出了抽象计算“图灵机”&#xff0c;使算法的概念得以形式化&#xff0c;至今仍在许多理论和实践研究中得到应用。世人公认&#xff0c;图灵的科学…

源码调试debug_info 的作用和使用方法

在他通过gcc来编译程序时&#xff0c;在map文件中&#xff0c;经常会遇到如下的情况&#xff1a; .debug_info 0x002191b6 0x1aa9 XXX .debug_info 0x0021ac5f 0xce4 XXX .debug_info 0x0021b943 0x9cf XXX .debug_info 0x0021c312 0x1119 XXX最近遇到了一些问题&#xff0c;需…

java中如何声明外键约束,外键约束不正确 - java-mysql

what is the mysql problem ??I do not know what the error is since I had not used foreign keys beforeString clientes "CREATE TABLE clientes(""ID INTEGER NOT NULL AUTO_INCREMENT,""CUENTA INTEGER,""NOMBRE VARCHAR(255),&qu…

1.5亿重奖50位青年科学家!第二届“科学探索奖”揭晓

来源&#xff1a;科学网作者&#xff1a;赵广立9月25日&#xff0c;启动资金高达10亿元的“科学探索奖”正式公布第二届获奖名单&#xff0c;50位青年科学家获奖。他们将在未来5年各获得由腾讯基金会资助的300万元科研奖金。值得一提的是&#xff0c;50位获奖者中&#xff0c;最…

dokcer3

安装好的文件位置&#xff1a;/usr/sbin/nginx&#xff1a;主程序/etc/nginx&#xff1a;存放配置文件/usr/share/nginx&#xff1a;存放静态文件/var/log/nginx&#xff1a;存放日志其实从上面的根目录文件夹可以知道&#xff0c;Linux系统的配置文件一般放在/etc&#xff0c;…