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
protocol buffer相关相关推荐
- Protocol Buffer Basics: C#
Protocol Buffer 基础知识:c# 原文地址:https://developers.google.com/protocol-buffers/docs/csharptutorial 这 ...
- Protocol Buffer技术详解(语言规范)
该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo.这样做的目的主要在于不仅可以保持Google文档的良好风格 ...
- Protocol Buffer Java应用实例
生成目标语言代码 下面的命令帮助我们将MyMessage.proto文件中定义的一组Protocol Buffer格式的消息编译成目标语言(Java)的代码.至于消息的内容,我们会在后面以分段的形式逐 ...
- Protocol Buffer基本语法
为什么使用Protocol Buffer? 在回答这个问题之前,我们还是先给出一个在实际开发中经常会遇到的系统场景.比如:我们的客户端程序是使用Java开发的,可能运行自不同的平台,如:Linux.W ...
- [翻译]Protocol Buffer 基础: C++
目录 Protocol Buffer Basics: C++ 为什么使用 Protocol Buffers 在哪可以找到示例代码 定义你的协议格式 编译你的 Protocol Buffers Prot ...
- Protocol Buffer入门——轻松搭建java环境 .
http://blog.csdn.net/xyz317100759/article/details/6261236 2011-03-19 15:44 1185人阅读 评论(5) 收藏 举报 由于项目的 ...
- 使用hessian+protocol buffer+easyUI综合案例--登陆
首先先简单介绍下hessian ,protocol buffer, easyUI框架 hessian: Hessian是一个轻量级的remoting on http工具,采用的是Binary RPC协 ...
- Google Protocol Buffer学习笔记(一)
概述: 新公司用的平台和相关技术都与原公司使用的不同,原来是linux+thrift而现在换成了windows+protobuf了. 参考资料: https://developers.google.c ...
- 通信协议之Protocol buffer(Java篇)
之前一直习惯用json进行数据的传输,觉得很方便.来到新公司后发现同事们用的更多的的协议都不是json,而是Protocol buffer.这个东西之前没有听说过,不明白同事们为什么放弃好好的json ...
最新文章
- Android应用系列:完美运行GIF格式的ImageView(附源码)
- 我是怎么提高单片机编程能力的?
- 【连载】高效人士的116个IT秘诀(第2版)——秘诀25快速记录你的工作日志
- 怎么样MyEclipse配置Tomcat?
- oracle查看被锁的行,查找被锁的表到底是哪一行被锁定了
- OpenGL编程指南8:模型组合变换
- 七、Sqoop架构,安装和基本使用
- java 操作日志设计_日志系统新贵 Loki,确实比笨重的ELK轻
- Dubbo中的监控和管理
- okHttp源码解析------待续
- 通用的websocket模板代码
- 计算机等级考试初级网络工程师,2019年全国计算机等级考试网络工程师四级,需..._网络编辑_帮考网...
- 敏捷开发团队绩效管理与目标管理:关于如何为团队设立外部目标
- MyBatis的XML配置文件(二)
- 收藏:通俗讲解计算机工作原理
- 房屋征收拆迁信息化管理平台
- index.php.bak 颓废_18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
- 【网课视频提取ppt】【原创好用】如何自动提取视频中的PPT画面?网课视频提取ppt教程
- python中的换行与不换行
- CENTOS上的网络安全工具(五)CODE来打个酱油
热门文章
- 长亭php反序列化防护_CTF-攻防世界-Web_php_unserialize(PHP反序列化)
- 就业阶段-java语言进价_day06
- LeetCode 1980. 找出不同的二进制字符串
- LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?(前缀和)
- 天池 在线编程 插入五
- LeetCode 1093. 大样本统计
- LeetCode 812. 最大三角形面积(坐标面积公式)
- 文本查询TextQuery类文件编写
- amd cpu 安卓模拟器_夜神模拟器常见问题解答_v20201025
- 华为服务器上传文件后怎么通过链接查看,远程服务器文件上传后的操作