java 使用 protobuf的示例

1、创建Stndent.proto并加入

syntax = "proto2";

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 phones = 4;
}

message AddressBook {
  repeated Person people = 1;
}

  2.安装protoc,并添加环境变量,后,执行

protoc -I=Student.proto目录 --java_out=输出的protobuf辅助类存放位置 Student.proto要生成的proto文件

  3、将生成的文件复制到项目中,项目添加2个protobuf的jar包,protobuf-java-3.9.0.jar和protobuf-java-util-3.9.0.jar

  4、编写测试代码

Person person = Person.newBuilder().setEmail("email").setName("name").setId(12)
				.addPhones(0, PhoneNumber.newBuilder().setNumber("phone").build()).build();
		byte[] data = person.toByteArray();
		Person p1 = Person.parseFrom(data);
		System.out.println(p1.getName());
		System.out.println(p1.getEmail());
		System.out.println(p1.getId());
		System.out.println(p1.getPhones(0).getNumber());

  5、运行程序

至此,Protocol buffer的测试代码完成,如果你想深入了解,需要详细了解第一步如何定义一个message

 

转载于:https://www.cnblogs.com/jiecaoge/p/11185416.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个Java使用Protobuf示例: 首先,你需要下载并安装Protobuf编译器。你可以从官方网站(https://developers.google.com/protocol-buffers)下载适合你操作系统的编译器。 接下来,你需要定义一个Protobuf消息的.proto文件。在这个文件中,你可以定义消息的结构和字段。例如,你可以创建一个名为"message.proto"的文件,内容如下: ```protobuf syntax = "proto3"; package com.example; message Person { string name = 1; int32 age = 2; repeated string hobbies = 3; } ``` 然后,你可以使用Protobuf编译器将.proto文件编译成Java类。在命令行中运行以下命令: ```shell protoc --java_out=./path/to/output/directory message.proto ``` 这将生成一个名为"Person.java"的Java类,该类对应于你在.proto文件中定义的消息。 接下来,你可以在Java代码中使用生成的类来创建和序列化Protobuf消息。例如,你可以创建一个名为"Main.java"的Java文件,内容如下: ```java import com.example.Person; public class Main { public static void main(String[] args) { // 创建一个Person对象 Person person = Person.newBuilder() .setName("Alice") .setAge(25) .addHobbies("reading") .addHobbies("hiking") .build(); // 将Person对象序列化为字节数组 byte[] serializedPerson = person.toByteArray(); // 将字节数组反序列化为Person对象 Person deserializedPerson = Person.parseFrom(serializedPerson); // 打印Person对象的属性 System.out.println("Name: " + deserializedPerson.getName()); System.out.println("Age: " + deserializedPerson.getAge()); System.out.println("Hobbies: " + deserializedPerson.getHobbiesList()); } } ``` 在上面的示例中,我们创建了一个Person对象,并设置了其属性。然后,我们将Person对象序列化为字节数组,并将其反序列化为新的Person对象。最后,我们打印了反序列化后的Person对象的属性。 你可以使用Java编译器编译Main.java文件,并运行生成的可执行文件来运行示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值