ProtoBuf安装
ProtoBuf源码下载:https://github.com/google/protobuf/releases
windows编译器:protoc-3.6.1-win32.zip
Windows环境
将protobuf-all-3.6.1.zip包解压,再将protoc-3.6.1-win32.zip解压把protoc.exe程序放到解压的protobuf-all-3.6.1的src文件夹目录下
新建Java项目(gradle)
通过idea新建一个gradle项目,在build.gradle文件下添加:
compile group:'com.google.protobuf',name:'protobuf-java',version:'3.6.1'
创建test.proto文件
syntax = "proto3"; //设置版本号,如不设置,默认2.0版本语法
option java_outer_classname = "PersonEntity";//生成的数据访问类的类名
option java_package = "com.smart.protobufdemo.protobuf"; //生成的数据访问类的package
message Person {
int32 id = 1;//同上
string name = 2;//必须字段,在后面的使用中必须为该段设置值
string email = 3;//可选字段,在后面的使用中可以自由决定是否为该字段设置值
}
创建一个protoc命令代码
package com.smart.protobufdemo;
import java.io.IOException;
/**
* @date : 2018/8/7 16:14
* @author: lichen
* @email : 1960003945@qq.com
* @description :
*/
public class ExeProtobuf {
public static void main(String[] args) throws IOException {
String strCmd = "F:\\environment\\protobuf-all-3.6.1\\protobuf-3.6.1\\src\\protoc.exe " + //下载的protoc.exe文件绝对路径
" -I=F:\\workspace\\java\\ProtobufDemo " + //test.proto文件相对路径
" --java_out=F:\\workspace\\java\\ProtobufDemo\\src\\main\\java " + //要生成的实体类路径
" F:\\workspace\\java\\ProtobufDemo\\test.proto"; //test.proto文件绝对路径
Runtime.getRuntime().exec(strCmd);
}
}
运行ExeProtobuf的main方法,在指定文件目录下生成PersonEntity类
测试
package com.smart.protobufdemo;
import com.smart.protobufdemo.protobuf.PersonEntity;
import java.io.IOException;
/**
* @date : 2018/8/7 16:14
* @author: lichen
* @email : 1960003945@qq.com
* @description :
*/
class ProtobufTest {
public static void main(String[] args) throws IOException
{
//模拟将对象转成byte[],方便传输
PersonEntity.Person.Builder builder = PersonEntity.Person.newBuilder();
builder.setId(3);
builder.setName("zhangsan");
builder.setEmail("test@qq.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();
PersonEntity.Person p2 = PersonEntity.Person.parseFrom(byteArray);
System.out.println("after :" + p2.toString());
}
}
结果
---------------------------------分割线----------------------------------
Mac环境
安装
下载mac版本的protobuf 解压到指定目录
先给指定目录添加权限(sudo chmod -R 777 某一目录)
cd到指定目录,终端执行一下步骤
./configure
make
make check
make install
通过protoc --version 查看是否安装成功
编译proto文件,生成对应的java文件
protoc --java_out=./ protocal.proto