Google protobuf 是一个高性能的通信协议,具有多语言支持,协议数据小,方便传输,高性能等特点。通过将数据序列化成二进制数组,并将二进制数组反序列化成数据对象。用于取代JSON,XML,作为服务器优秀的通信协议。
本文档的示例用JAVA编写
先去google的网站上下载protobuf 协议的支撑包地址:http://code.google.com/p/protobuf/downloads/list 要下载两个东西一个是 protobuf-2.4.1.zip 支撑包,protoc-2.4.1-win32.zip代码生成工具
稍微讲一下google protobuf的工作流程;首先,编写后缀为.proto的数据格式文件,该文件用来定义数据格式
其次,protobuf的代码生成工具,生成你想要的代码,这里生成JAVA。
能后,调用protobuf生成的类提供的.proto数据结构的解析以及进行.proto数据序列化反序列化的方法,进行数据的二进制序列化以及反序列化
最后,你就可以像使用JSON那样,进行数据的传递了
继续讲怎么用,下载下来包后,把protobuf-2.4.1.zip 包解压,找到JAVA文件夹,将JAVA文件下的src打成jar导入你的项目里(当然你亦可以直接引用不打jar),后面的方法需要调用这个jar的接口
引入项目后,在你项目src跟目录下,编写数据结构文件,这里为User.proto,文件如下
package test;
option java_package = "com.example.test";
option java_outer_classname = "TestUserProtos";
message User{
required int32 id =1;
required string name =2;
required double weight =3;
required double height =4;
required int32 age =5;
}
这是一个简单的数据结构,看起来就更JAVA一样
第一行为包名,可以不管他
option java_package = "com.example.test"; 指定生成的报名
option java_outer_classname = "TestUserProtos"; 指定生成的类名
能后就是数据体了
数据类型bool,int32,float,double和string也可以使用自己定义的类型,类类型,这个下面有
每个字段必须提供一个修饰词:
1、required: 表示字段必须提供,不能为空.否则,message会被认为是未初始化的,识图build为初始化的message会抛出RuntimeException,解析未初始化的message会抛出IOException..除此之外,一个required字段与optional字段完全相同.
2、optional:可选字段,可以设置也可以不设置.如果没有设置,会设置一个缺省值.你可以指定一个缺省值,正像电话号码的type字段,否则,使用系统的缺省值:数字类型缺省为0,