ProtoBuf 的java使用

碰巧用到Proto,算是笔记吧

windows :

1,两个文件:proto.exe,  protobuf-java-2.4.1.jar

2,建立一个工程TestPb,在下面建立一个proto文件件,用来存放【。proto】文件
3,将proto,exe放在工程下,

4,建立一个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 CountryInfo {
          required string name = 1;
          required string code = 2;
          optional int32 number = 3;
  }
}
 
message AddressBook {
  repeated Person person = 1;
}
5,生成 java文件:在proto.exe目录下:protoc  --java_out=./src   ./proto/msg.proto

 

 

6,copy个测试示例了

新建一个文件TestPb.java
***********************************************************
package com.protobuftest.protobuf;
 
import java.util.List;
 
import com.google.protobuf.InvalidProtocolBufferException;
import com.protobuftest.protobuf.PersonProbuf;
import com.protobuftest.protobuf.PersonProbuf.Person;
import com.protobuftest.protobuf.PersonProbuf.Person.PhoneNumber;
 
public class TestPb {
 
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonProbuf.Person.Builder builder = PersonProbuf.Person.newBuilder();
builder.setEmail("kkk@email.com");
builder.setId(1);
builder.setName("TestName");
builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("131111111").setType(PersonProbuf.Person.PhoneType.MOBILE));
builder.addPhone(PersonProbuf.Person.PhoneNumber.newBuilder().setNumber("011111").setType(PersonProbuf.Person.PhoneType.HOME));
 
Person person = builder.build();
byte[] buf = person.toByteArray();
 
try {
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
System.out.println(buf);
 
}
 
}
***********************************************

*******************************
生成java文件:PersonProbuf.java
*******************************
工程文件结构:


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Protobuf 是一种由 Google 开发的用于序列化结构化数据的协议。Protobuf Java API 是用于在 Java 中操作和使用 Protobuf 的开发者接口。 Protobuf Java API 提供了一种简单而高效的方式来处理和管理 Protobuf 数据。使用 Protobuf Java API,开发者可以定义数据模型,将数据序列化成二进制格式,并可以将二进制数据反序列化为对象实例。 通过 Protobuf Java API,开发者可以轻松地创建 Protobuf 消息,定义消息字段和类型,并根据自己的需求对消息进行定制。API 还提供了一些实用的方法,例如对消息进行合并、拷贝和克隆。开发者还可以使用 API 将消息序列化为二进制数据,并通过网络传输或存储到磁盘等介质中。 使用 Protobuf Java API 还可以实现高效的数据交互。由于 Protobuf 的数据结构紧凑且二进制化,相比于 XML 和 JSON 等文本格式Protobuf 可以显著减少数据的大小,从而减少网络传输的负载和提高传输效率。在需要对大量数据进行交换和处理的场景中,Protobuf Java API 可以提供快速和高效的数据序列化和反序列化功能。 此外,Protobuf Java API 还支持版本兼容性。当数据结构发生变化时,可以使用 Protobuf Java API 进行兼容升级,而无需更改现有的代码和数据格式。这样可以保持系统的平滑过渡和持续演进,减少了对系统的影响和维护成本。 总之,Protobuf Java API 提供了一种强大且灵活的方式来处理和管理结构化数据。它简化了数据的序列化和反序列化过程,提供了高效的数据交互方式,并支持版本兼容性。无论是在网络通信、分布式系统、大数据处理还是移动应用开发等领域,Protobuf Java API 都是一种非常有用的工具。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值