###关于数据结构文件的描述符的含义1.required (表示必须存在)2.optional (表示可选,不一定需要有值)3.repeated (表示集合类)
###定义一个简单的数据结构package com.test;option java_outer_classname = "PersonData";message person { // ID(必需) required int32 id = 1; // 姓名(必需) required string name = 2 [default = 'Test']; // 年龄(可选) optional string age= 3; // 朋友的引用(集合) repeated int32 ids= 4 [packed=true]; }
### 使用protoc工具转换为Java类###参数:-I 表示结构文件所在的目录,#### --java_out 表示输出的文件目录#### 第三个参数person.proto 表示使用的是哪个结构文件protoc -I=.\ --java_out=.\ person.proto转换完成后把java文件考入对应的java包中,并在项目中引入GoogleProtocolBuffer的使用jar包com.google.protobuf protobuf-java 2.6.1
以下是生成后的Java测试:
package com.k.ctc.code;import com.test.PersonData;/** * @author Kai * @Date 2015-11-23 17:54:48 * @Desc */public class MainLauncher { public static void main(String[] params) throws Exception { long time1 = System.currentTimeMillis(); PersonData.person p = PersonData.person.newBuilder().setId(1).setAge("18").setName("LiLei").build(); System.out.println("======================================"); System.out.println(p); byte[] bytes = p.toByteArray(); System.out.println("======================================"); System.out.println(bytes.length); PersonData.person p1 = PersonData.person.parseFrom(bytes); System.out.println("======================================"); System.out.println(p1); long time2 = System.currentTimeMillis(); System.out.println("======================================"); System.out.println("time:" + (time2 - time1)); }}
执行结果是:
======================================id: 1name: "LiLei"age: "18"======================================13======================================id: 1name: "LiLei"age: "18"======================================time:125