protobuf初见
今天由于偶然的机会,了解到Google的protobuf,貌似功能很强大。
主要作用是自动生成实体类工具,并形成标准的java文件,用起来非常方便。
具体的格式可以参见:https://github.com/google/protobuf
实现步骤
第一步:环境准备
下载
首先需要下载protobuf-2.5.0-windows.zip,解压后得到一个protoc.exe文件,这个是可以自动生成实体类的工具。
第二、需要新建一个普通的maven工程,其结构是
添加配置信息:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>RELEASE</version>
</dependency>
同时将protoc.exe文件添加到proto文件夹中。
在proto文件夹中添加一个文件名为persion-entity.proto的文件:
option java_outer_classname = "PersonEntity";//生成的数据访问类的类名
message Person {
required int32 id = 1;//同上
required string name = 2;//必须字段,在后面的使用中必须为该段设置值
optional string email = 3;//可选字段,在后面的使用中可以自由决定是否为该字段设置值
}
上面可以看出定义了一个Person类,其中包含id,name和email属性,而且id和name是必须项,email是可选项。
第三、上面的所有步骤都做了之后,可以使用下面命令产生实体类
protoc.exe --java_out=./ persion-entity.proto
上面的--java_out 是指定输出路径,persion-entity.proto为你自己定义的文件
执行完之后将会生成一个java文件
其内容就是自动生成的。
现在测试
package com.protobuf.test;
import com.google.protobuf.InvalidProtocolBufferException;
import com.protobuf.proto.PersonEntity;
public class Test {
public static void main(String[] args) throws InvalidProtocolBufferException {
PersonEntity.Person.Builder builder = PersonEntity.Person.newBuilder();
builder.setId(1);
builder.setEmail("zhangzheming@google.com");
builder.setName("ant");
PersonEntity.Person person = builder.build();
System.out.println("before:"+person.toString());
System.out.println("=============");
for (byte b:person.toByteArray()){
System.out.print(b);
}
System.out.println();
System.out.println(person.toByteArray());
System.out.println("===============");
byte[] byteArray = person.toByteArray();
PersonEntity.Person p2 = PersonEntity.Person.parseFrom(byteArray);
System.out.println("after:"+p2.toString());
}
结果
before:id: 1
name: "ant"
email: "zhangzheming@google.com"
=============
8118397110116262312210497110103122104101109105110103641031111111031081014699111109
[B@573fd745
===============
after:id: 1
name: "ant"
email: "zhangzheming@google.com"