1.概念
Protocol buffers是一个用来序列化结构化数据的技术,支持多种语言诸如C++、Java以及Python语言,可以使用该技术来持久化数据或者序列化成网络传输的数据。相比较一些其他的XML技术而言,该技术的一个明显特点就是更加节省空间(以二进制流存储)、速度更快以及更加灵活。
如何使用?
a. 工具protoc.exe
b.创建.proto 文件
c.将.proto文件编译java类
d.message 的名称不能与java_outer_classname 名称相同,不然编译不过。
创建Person.proto文件
package com.xishinet.net.bean;
option java_package = "com.leehongee.net.bean";
option java_outer_classname = "Request";
message Person {
optional int64 id=1;
optional string name=2;
optional string sex=3;
optional string tel=4;
}
Person 为定义一个消息类型为Person
Person共有三个字段
都为optional(可选的)
int64对应java的long
string对应java的String
在消息定义中,每个字段都有唯一的一个标识符,可以理解为索引,用于识别各个字段
id=1,name=2,sex=3,tel=4,1,2,3,4并不是默认值
默认值可以这样设置:optional int32 result_per_page = 3 [default = 10];
required:一个格式良好的消息一定要含有1个这种字段。表示该值是必须要设置的;
optional:消息格式中该字段可以有0个或1个值(不超过1个)
repeated:在一个格式良好的消息中,这种字段可以重复任意多次(包括0次)。
重复的值的顺序会被保留。表示该值可以重复,相当于java中的List。
由于一些历史原因,基本数值类型的repeated的字段并没有被尽可能地高效编码。在新的代码中,用户应该使用特殊选项[packed=true]来保证更高效的编码
repeated int32 samples = 4 [packed=true];
备注:可以讲Person.proto放到你解压的protoc-2.4.1-win32.zip里面的protoc.exe同一级目录
然后cmd cd到该目录 执行protoc.exe --java_out=./ Person.proto,此时在这个目录下回生成Person.java文件
protoc.exe -I=. --java_out=. Request.proto
protoc.exe -proto_path=SRC --cpp_out=DST SRC/Request.proto
//此段代码是令 生成的java代码 继承GeneratedMessageLite
//继承GeneratedMessageLite的好处是
可以使用jboss提供的 编解码器
//可以认为是 比写项
option optimize_for =
LITE_RUNTIME;