2019-01-15
参考网址 1
参考网址 2 这个参考网址2 写的不咋地,写的有错误,作为键盘侠的我要。。。。算了算了 划水划水
大佬大佬惹不起惹不起
先行介绍这个玩意的由来?
Proto介绍:
Google Protocol Buffer 被我们简称proto,是 Google 公司内部的混合语言数据标准,proto buf是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。
-
以上抄自参考网址 1
-
下面开始安装和使用教程:
安装:
protoc --version #查看当前系统的proto版本?
如果没有
sudo apt-get install protobuf-compiler
安装就完了,盘它
想用proto 就得先写一个proto的文件
下面简单的介绍一下proto文件的大致组成:
proto 的编写:
syntax="proto2"; #这个proto后面可以用2 或者 3 取决于你安装的proto编译器的版本
option java_package = "org.serialization.protobuf.quickstart"; #这个也可以是没有`java_`的,java编译的时候用`java_`,c++编译的时候直接用package ,python的没看到但是我猜应该是python_package 指定报名字,就像给别的java 文件import的那个东西
option java_outer_classname = "PersonProtobuf"; #class 取了个别名
message Person #message 整个文件的主体
{
optional int32 age = 1;#age这种东西叫做成员 optional修饰词 说明这个成员在消息传递时时可选项,可以有可以没有
required string name = 2; #name这种东西也是成员 required 修饰词 是必须项
}
proto的编译 :
protoc --cpp_out=./ ./Person.proto
protoc --java_out=./ ./Person.proto
protoc --python_out=./ ./Person.proto
俩参数 一个指定编译方式同时指定了输出路径 , 第二个参数指定proto的文件
因为 支持三种语言的 api
分别就是c++ java & python
三种 Java
编出来是一个文件夹下面好几层有一个后缀java
的文件
c++
编出来的 是一个 后缀pb.h
和一个pb.cc
文件 h
声明cc
实现
python
编出来的还是后缀py
以上这个几种语言说的是版本2涉及到的语言,版本3支持的语言超级多
然后接下来是对这个message的读写,网址一说用c++ 行吧那就用c++的
为什么我点的黄焖鸡还没有送到?已经2019年1月15日12:15:57了
woc 终于发生了像王克一样的事情,定个外卖都被取消了2019-1-15 12:22:14
行吧 行吧 出去吃 去吃个炒面吧
- 接下来就是这个message的读写:
用pb.h中的类实例化一个对象 ,然后 就用这个对象去调用set_id
和set_name
的方法对这个对象进行操作。这是我在12:28:32理解,准备去吃午饭, 等会回来再看吧
上面的不重要了,了解一个proto文件中写enmu模具成员的目的:
大佬大佬那个网址往下拉,就能看的见
引用大佬原话:
当需要定义一个消息类型的时候,可能想为一个字段指定某“预定义值序列”中的一个值。
例如,假设要为每一个VrGetPhoneBook 消息添加一个 phonebookType 字段,而phonebookType 的值可能是phonebookType_contact ,phonebookType_incomingcall ,phonebookType_outgoingcall ,phonebookType_missedcall ,phonebookType_wholecall 中的一个。 其实可以很容易地实现这一点:通过向消息定义中添加一个枚举(enum)并且为每个可能的值定义一个常量就可以了。
syntax = "proto2";
package navi.VoiceRecog;
option java_package = "com.iauto.voice";
option optimize_for = LITE_RUNTIME;
option java_outer_classname="VrGetPhoneBookJ";
message VrGetPhoneBook {
enum phonebookType {
phonebookType_contact = 0;
phonebookType_incomingcall = 1;
phonebookType_outgoingcall = 2;
phonebookType_missedcall = 3;
phonebookType_wholecall = 4;
};
required phonebookType type = 1;
};
大概意思是这样的,那现在看看,message的读写
网友评论