1.什么是protobuff协议?
Protobuf(Google Protocol Buffers)是google开发的的一套用于数据存储,网络通讯时用于协议编解码的工具库.它和XML和Json数据差很少,把数据已某种形式保存起来.Protobuf相对与XML和Json的不一样之处,它是一种二进制的数据格式,具备更高的传输,打包和解包效率.
2.protobuf在java方面的应用。
1):下载安装。https://download.csdn.net/download/antgan/9593735
2):配置环境变量。
3)设计对象
。。。。
4)描述对象
package tutorial;
option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
message AddressBook {
repeated Person person = 1;
}
4.编译描述
cmd>protoc --java_out . xxx.proto
5.导入源代码到项目中
6.使用对象java
3、 Eclipse新建项目
我使用maven构建protobuf项目,方便引入protobuf-java-2.5.0.jar依赖。
在项目根目录建立proto文件夹,存放proto文件。
这里写图片描述
maven依赖pom.xml网络
4、编写.proto文件
在proto文件夹下编写person-entity.proto,以下(proto协议的规则点这查看)工具
option java_outer_classname = "PersonEntity";//生成的数据访问类的类名
message Person {
required int32 id = 1;//同上
required string name = 2;//必须字段,在后面的使用中必须为该段设置值
optional string email = 3;//可选字段,在后面的使用中能够自由决定是否为该字段设置值
}测试
4、使用protoc.exe编译成java类
有两种方法:ui
直接打开cmd运行命令也行。google
使用Java Rumtime执行cmd命令
util包下新建GenerareClass类
这里写图片描述.net
/**设计
命令格式以下。code
protoc.exe -I=proto的输入目录 --java_out=java类输出目录 proto的输入目录包括包括proto文件
1
生成的PersonEntity.java类
这里写图片描述
5、测试
编写Test类,模拟序列化和反序列化过程。
public class Test {
public static void main(String[] args) throws IOException {
//模拟将对象转成byte[],方便传输
PersonEntity.Person.Builder builder = PersonEntity.Person.newBuilder();
builder.setId(1);
builder.setName("ant");
builder.setEmail("ghb@soecode.com");
PersonEntity.Person person = builder.build();
System.out.println("before :"+ person.toString());
System.out.println("===========Person Byte=========="); for(byte b : person.toByteArray()){ System.out.print(b); } System.out.println(); System.out.println(person.toByteString()); System.out.println("================================"); //模拟接收Byte[],反序列化成Person类 byte[] byteArray =person.toByteArray(); Person p2 = Person.parseFrom(byteArray); System.out.println("after :" +p2.toString()); }
}
输出以下 这里写图片描述