谷歌protocolbuff使用说明步骤
Protocolbuff
目录
1 Protocolbuff定义和作用... 1
2 Protocolbuff的使用步骤... 1
3 .proto编写格式... 3
3.1 编写示例... 3
3.2 变量修饰符required 、optional、repeated. 4
3.3 基本数据类型... 4
1 Protocolbuff定义和作用
Protocolbuff是一种数据存储传输格式,类似于Json、XML 数据存储格式。发送方将结构体序列化为二进制字节码,可以减少传输字节数量,增强安全性。接收方将字节码再反序列化为结构体。解析快速,无需像json或者xml那样,两边添加生成报文和解析报文的编码;
优缺点
优点:Protocolbuff将结构体或对象转换成二进制串,所以体积小,传输快,使用简单,加密性好;
缺点:可读性差,通用性差;
2 Protocolbuff的使用步骤
(1) 下载protoc.exe文件
源码在 https://github.com/google/protobuf , 如果不想自己编译获得最新版本,则可以下载官方编译好的各个平台的,下载地址:https://github.com/google/protobuf/releases。
(2)编写结构体的.proto文件CommEventLog.proto
(3)在window系统下,在protoc.exe所在的文件夹打开cmd,用如下命令生成C++的结构体文件;
protoc –I=./ --cpp_out=./ ./ CommEventLog.proto
protoc执行程序,后面的是命令行参数
-I 输入目录
--cpp_out 输出目录
./ CommEventLog.proto表示需要转换的文件;
最后输出的结果是C++的类文件CommEventLog.pb.cc和CommEventLog.pb.h
(4)将CommEventLog.pb.cc和CommEventLog.pb.h两个文件复制到需要的工程。包含如下头文件,添加libprotobuf.lib、libprotobuf.dll。代码中创建类的对象,CommEventLog evnetlog;

(5)接收到二进制字节码时,用对象的方法ParseFromArray 去将二进制字节码转化为结构体;
if (evnetlog.ParseFromArray(buff,bufflen)==true)
{}
(6)然后就可以用变量名称命名的方法去获取变量的值;
string strtime=evnetlog.start_time();
3 .proto编写格式
3.1 编写示例
Proto文件开头定义一个包名,即命名空间,为了避免不项目的命名冲突问题。然后用关键字message来定制结构体;
package protocobuff_Demo;//包名
message CommEventLog
{
required string log_id = 1;//日志Id,唯一标识一次发生的事件
required int32 event_state = 2;//事件状态,事件状态为开始或者瞬时时保存事件,状态为结束时更新日志结束时间,状态为更新时保存联动结果;0: 瞬时事件,保存;1: 事件开始,保存;2: 事件结束,更新结束时间;3: 事件脉冲,客户端和服务器使用,CMS不用;4: 事件更新,联动结果更新
optional int32 event_level = 3;//事件等级
optional string unit_idx = 4;//控制中心编号
optional int32 event_type = 5;//事件类型
optional string event_type_name = 6;//事件类型名称
optional int32 sub_sys_type = 7;//事件所属子系统类型,废弃,事件整改,没有子系统属性了2015-10-28 13:45:13
optional string event_name = 8;//事件名称
optional string start_time = 9;//事件开始时间
optional string stop_time = 10;//事件结束时间
optional string source_idx = 11;//事件源编号
optional int32 source_type = 12;//事件源类型
optional string source_name = 13;//事件源名称
optional string log_txt = 14;//事件描述信息
optional string region_idx = 15;//事件源区域编号,可选
optional bytes ext_info = 20;//事件扩展信息,各个子系统根据子系统的消息结构体定义解析
repeated int32 user_id = 21;//事件接收的User Id数组,用于日志查询权限控制
}
3.2 变量修饰符required 、optional、repeated
变量修饰符的作用是修饰变量,确定变量是否必须赋值。

3.3 基本数据类型
基本数据类型用于定义变量类型。与编程语言的中的变量类似,名称稍有不同,含义一致。

自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:
https://www.cnblogs.com/bclshuai/p/11380657.html
百度云盘下载地址:
链接:https://pan.baidu.com/s/1swkQzCIKI3g3ObcebgpIDg
提取码:mc8l
微信公众号获取最新的软件和视频介绍
QStockView

参考文献
https://www.cnblogs.com/xinmengwuheng/p/7070393.html
https://cloud.tencent.com/developer/article/1394349
谷歌protocolbuff使用说明步骤的更多相关文章
- 实战-Fluxion与wifi热点伪造、钓鱼、中间人攻击、wifi破解
原作者:PG 整理:玄魂工作室-荣杰 目录: 0x00-Fluxion是什么 0x01-Fluxion工作原理 0x02-Kali上安装fluxion 0x03-Fluxion工具使用说明+实 ...
- GCM 发送接收消息 Message Client Server 服务器端,客户端
GCM 传递参数 最近用了很多时间做GCM,由于碰到很多问题,因此详细做一下记录,以方便各位网友,不用再走我的重复的路.不过我试了一下GCM在国内很不好用.假如开发国外的程序的话,用GCM倒是很不错的 ...
- Mysql存储过程历史表备份
应用背景 SCADA采集系统需要将实时数据存入历史表.问题1:如何更简单的添加历史数据?2.海量历史数据,比如年数据,如何快速筛选 画曲线? 利用mysql的事件,每小时存一次采集数据: 每月备份历史 ...
- 微信小程序的模板消息与小程序订阅消息
小程序订阅消息 功能介绍 消息能力是小程序能力中的重要组成,我们为开发者提供了订阅消息能力,以便实现服务的闭环和更优的体验. 订阅消息推送位置:服务通知 订阅消息下发条件:用户自主订阅 订阅消息卡片跳 ...
- 谷歌日志库GLog 使用说明
1 引用头文件 加载库 #include <glog/include/logging.h> #pragma comment(lib,"libglog.lib") 2 初 ...
- Gradle+IDEA使用说明
Gradle+IDEA使用说明 导语: IDEA拥有大量的JAVA开发者拥护,相比于开源的eclipse,IDEA拥有更简洁直观的界面,拥有更强大的自动补全功能,号称能“一路敲回车完成编码”.如果把I ...
- Cisco模拟器Web-IOU使用说明 转
http://blog.sina.com.cn/s/blog_af0abf1f0102uztk.html GNS3作为使用最多的Cisco官方模拟器,是因为它使用简单,所有设置图形化,是一款非常强 ...
- UNICODE本地编译freescale的i.MX6Q的android4.2.2&android4.4.2 && 全志a80的步骤x1
20151031本地编译freescale的i.MX6Q的android4.2.2&android4.4.2 && 全志a80的步骤x1 2015/10/31 15:07 开始 ...
- 3.Kali 1.0 / 2.0 安装中文输入法(谷歌pinyin + 其他)
1.kali默认是没有中午输入法的,需要自己安装一下 2.首先我们先获取root权限 dnt@HackerKali:~$ su密码: 3.安装中文输入法(apt-get 指令不会的同学可以学习一下基础 ...
随机推荐
- 大数据测试类型&大数据测试步骤
一.什么是大数据? 大数据是一个大的数据集合,通过传统的计算技术无法进行处理.这些数据集的测试需要使用各种工具.技术和框架进行处理.大数据涉及数据创建.存储.检索.分析,而且它在数量.多样性.速度方法 ...
- java面试1
1.面向对象的特征·有·哪些方面 1)抽象 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽 ...
- python视频学习笔记6(名片管理系统开发)
cards_main.py主函数 cards_tools.py -------------------------------------------------------------------- ...
- Swift调用微信支付宝SDK(Swift4.0)
1.第一步在程序入口注册微信 (支付宝不需要) func application(_ application: UIApplication, didFinishLaunchingWithOption ...
- java_day06_java高级特性
Advance Java Programming 第六章: java语言高级特性(part1) 1.static修饰符 1)static变量 在类中,使用static修饰的成员变量,就是静态变量,反之 ...
- vim 去掉自动注释和自动回车
取消 :set paste 恢复 :set paste!
- linux之网络命令
本文整理了在实践过程中使用的Linux网络工具,这些工具提供的功能非常强大,我们平时使用的只是冰山一角,比如lsof.ip.tcpdump.iptables等. 本文不会深入研究这些命令的强大用法,因 ...
- 【2017-04-20】Ado.Net与面向对象结合架构中的数据访问层(实体类,数据访问类)
开发项目三层架构:界面层.业务逻辑层.数据访问层 今天学习一下数据访问层,分为实体类和数据访问类 所有的类放在App_Code这个文件夹下边.养成一个好的习惯. 一.实体类 数据库中的表映射为一个类, ...
- 裸磁盘上ext4与xfs在线扩容,非LVM
虚拟机添加一个20G的硬盘,磁盘为sdb,分区为ext4 格式化一个5Gib的磁盘出来,用dd命令写入4G数据. 一.需求是容量为5G的磁盘,文件系统为ext4的sdb1扩容到10G. 操作步骤为 1 ...
- 第八章 watch监听 84 watch-监视路由地址的改变
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...