JAVA操作google protobuf简单示例

编写 一个test.proto文件

option java_package = "com.proto"; 
option java_outer_classname = "FirstProtobuf"; 
message TestBuf  { 
  required int32 ID = 1; 
  required string Url = 2; 
}


利用protoc.exe 生成java文件:

protoc.exe --java_out=./ test.proto

写个测试类:

package com.test;

import java.io.IOException;
import com.proto.FirstProtobuf;
import com.proto.FirstProtobuf.TestBuf;

public class TestProtoBuf {

	public static void main(String[] args) throws IOException {
		//序列化过程 
		//FirstProtobuf是生成类的名字,即proto文件中的java_outer_classname 
		//testBuf是里面某个序列的名字,即proto文件中的message testBuf 
		
		FirstProtobuf.TestBuf.Builder builder = FirstProtobuf.TestBuf.newBuilder();
		
		builder.setID( 123 );
		builder.setUrl("http://www.21cn.com");
		
		TestBuf info = builder.build();
		byte[] buf = info.toByteArray();
		
		TestBuf tb = TestBuf.parseFrom(buf);
		System.out.println( tb.getID());
		System.out.println( tb.getUrl());
	}
}



  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中使用google.protobuf.Any的示例可以按照以下步骤进行: 1. 首先,确保你已经安装了Protocol Buffers编译器(protoc)和JavaProtocol Buffers库。如果没有安装,可以按照官方文档进行安装。 2. 在项目中创建一个.proto文件,用于定义要序列化的数据结构。例如,创建一个名为person.proto的文件: ```protobuf syntax = "proto3"; option java_package = "com.example.protobuf"; option java_outer_classname = "PersonProto"; import "google/protobuf/any.proto"; message Person { int32 id = 1; string name = 2; string email = 3; google.protobuf.Any extra_data = 4; } ``` 在上面的示例中,我们引入了google.protobuf.any.proto文件,并在Person消息中添加了一个extra_data字段,用于存储任意类型的数据。 3. 使用protoc编译器将.proto文件编译成对应的Java类。在命令行中运行以下命令: ```shell protoc --java_out=./src/main/java person.proto ``` 这将生成一个名为PersonProto.javaJava类,该类包含了根据.proto文件定义的消息结构。 4. 在Java代码中使用google.protobuf.Any。下面是一个示例代码: ```java import com.example.protobuf.PersonProto.Person; import com.google.protobuf.Any; import com.google.protobuf.ByteString; public class Main { public static void main(String[] args) { // 创建一个Person对象 Person person = Person.newBuilder() .setId(1) .setName("John") .setEmail("john@example.com") .build(); // 创建一个Any对象,并将Person对象序列化为ByteString Any any = Any.pack(person); // 将Any对象存储到Person对象的extra_data字段中 Person personWithExtraData = Person.newBuilder() .setId(2) .setName("Jane") .setEmail("jane@example.com") .setExtraData(any) .build(); // 从Person对象的extra_data字段中获取Any对象,并解析为Person对象 if (personWithExtraData.hasExtraData()) { Any extraData = personWithExtraData.getExtraData(); if (extraData.is(Person.class)) { Person unpackedPerson = extraData.unpack(Person.class); System.out.println("Unpacked Person: " + unpackedPerson); } } } } ``` 在上面的示例中,我们创建了一个Person对象,并将其序列化为Any对象。然后,我们将Any对象存储到另一个Person对象的extra_data字段中。最后,我们从extra_data字段中获取Any对象,并将其解析为Person对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值