protocolbuffer 在java中的使用 (windows平台)

1、下载 protoc-2.6.1-win32.zip 

https://github.com/google/protobuf/releases?after=v3.0.0-alpha-1

压缩包内有一个protoc.exe,用来把proto的消息文件生成java实体类

2、建立一个Maven工程,添加protobuf-java的依赖。依赖的版本要和上面的protoc的版本保持一致
依赖包地址如下:
http://mvnrepository.com/artifact/com.google.protobuf/protobuf-java/2.6.1

<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>2.6.1</version>
</dependency>

如果不是Maven功能,就单独下载这个jar包,然后把jar文件加入到已有的工程中去使用。

3、建立一个测试的msg.proto文件,内容如下:

option java_package = "com.protobuftest.protobuf";
option java_outer_classname = "PersonProbuf"; 

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、生成 java文件:打开命令窗口(cmd),进入proto.exe目录下,执行如下命令:
protoc --java_out=../src ./msg.proto注意路径根据实际情况修改


生成在src下会生成对应的java类:



5、建立测试:


// 创建builder对象
PersonProbuf.Person.Builder builder = PersonProbuf.Person.newBuilder();
builder.setEmail("ggggggg@email.com");
builder.setId(1);
builder.setName("TestName");
builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("13664262866")
.setType(PersonProbuf.Person.PhoneType.MOBILE));
builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("02869387891")
.setType(PersonProbuf.Person.PhoneType.HOME));
// 通过builder转化为Person对象
Person person = builder.build();
// 将person对象转化为字节流
byte[] buf = person.toByteArray();

try {
// 通过字节流转化 为Person对象
Person person2 = PersonProbuf.Person.parseFrom(buf);
System.out.println(person2.getName() + ", " + person2.getEmail());
List<PhoneNumber> lstPhones = person2.getPhoneList();
for (PhoneNumber phoneNumber : lstPhones) {
System.out.println(phoneNumber.getNumber());
}
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}

System.out.println(buf);


执行结果:


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DoitPlayer

你的鼓励是我创作的最大源泉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值