protobuf序列化实例(Java实现) - Go语言中文社区

protobuf序列化实例(Java实现)


protobuf是google开源的序列化工具,他支持很多语言。这里介绍如何通过protobuf在java中做序列化。首先,我们需要准备protoc编译环境,这个是前提,我们写好了proto文件,当然需要生成对应的java类,这时候,就需要protoc-2.x.x-win32工具将其转为java类。这里我使用的是protoc-2.4.1-win32工具,这个在网上可以下载,下载之后,解压到本地,然后将/path/to/protoc路径加入环境变量的path变量中,这样,我们可以在命令行下运行protoc命令了。如下所示:

准备一个User.proto文件,内容如下,我们定一个User类,下面有4个属性,分别是id,name,age,mobile。

option java_outer_classname="UserProtoBuf";
option java_package="com.xxx.serial";
message User{
	required int32 id=1;
	required string name=2;
	optional int32 age=3;
	optional string mobile=4;
}

虽然语法和java有些区别,而且数据类型也不太一样,但是基本能够看得懂这个proto文件表示的含义。它指定了生成的java类名和对应的包名package,使用message关键字定义了User对象,最后定义了四个属性字段。 

我们在命令行下通过如下命令,就可以生成一个Java类了:

E:javaworkspacejavaeesrcmainjava>protoc --java_out=. comxxxserialUser.proto

没有任何报错,那么生成的文件就是UserProtoBuf.java,截图如下:

接下来,我们需要在maven工程中加入protobuf-java依赖,我们要使用protoc创建的java类,必须要加入protobuf-java这个依赖。

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

 最后,我们就通过一个测试类来使用我们序列化之后的UserProtoBuf类。

package com.xxx.serial;

import com.xxx.serial.UserProtoBuf.User;

public class UserProtoMain {

	public static void main(String[] args) {
		UserProtoBuf.User.Builder builder = UserProtoBuf.User.newBuilder();
		builder.setId(1);
		builder.setName("protoc-java");
		builder.setAge(18);
		builder.setMobile("15011186302");
		User user = builder.build();
		System.out.println(user.toString());
	}

}

运行之后,打印信息如下:

 

这篇文章,简单介绍了如何从proto文件到java文件,再到使用生成的java文件做序列化的过程。在实际应用中,protobuf的数据类型比这个还要多,序列化可能更复杂。 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/feinifi/article/details/94728793
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-02 18:25:55
  • 阅读 ( 1757 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢