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命令了。如下所示:

protobuf序列化实例(Java实现)_第1张图片

准备一个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:\javaworkspace\javaee\src\main\java>protoc --java_out=. com\xxx\serial\User.proto

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

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


  com.google.protobuf
  protobuf-java
  2.6.1

 最后,我们就通过一个测试类来使用我们序列化之后的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());
	}

}

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

protobuf序列化实例(Java实现)_第2张图片

 

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

你可能感兴趣的:(java)