java序列化 protobuf_java序列化机制之protobuf(快速高效跨语言)

我们之前曾讲过java自带的一种序列化机制,然则这种机制效率太低,有许多瑕玷。因此也涌现出了许多优异的系列化框架,比如说protobuf、protostuff、thrift、hession、kryo、avro、fst、msgpack等等。这篇文章我们就看一下第一个序列化框架protobuf,给出一个简朴案例,看看其是若何实现的。

注:若你对序列化观点和基本使用另有疑惑,可以翻看我之前的文章,或者百度一些基本观点和作用。

一、为什么要使用protobuf?

使用protobuf的缘故原由一定是为了解决开发中的一些问题,那使用其他的序列化机制会泛起什么问题呢?

(1)java默认序列化机制:效率极低,而且还能不能跨语言之间共享数据。

(2)XML常用于与其他项目之间数据传输或者是共享数据,然则编码和解码会造成很大的性能损失。

(3)json花样也是常见的一种,然则在json在剖析的时刻异常耗时,而且json结构异常占内存。

然则我们protobuf是一种天真的、高效的、自动化的序列化机制,可以有用的解决上面的问题。现在应该清晰了吧,正是由于现在的机制存在了许多问题,以是才有了这个序列化框架。

二、若何使用protobuf

protobuf这么优异使用起来也是异常的简朴,我们可以给出其主要的三个步骤,然后使用一个基本的案例去实现一下。

(1)界说.proto文件:我们在这个文件中形貌我们序列化的信息,类似于bean类。

(2)凭据.proto天生对应的类文件,上面这个proto就像是一个模板,现在我们要凭据这个模板创建出一个java类。

(3)序列化。

有了这个基本的步骤我们我们就详细去实现一下:

1、下载安装protobuf

第一步:下载解压

我的电脑是windows10,因此这里给出在windows下的使用,linux下面使用我也将在后续文章推出。我们首先下载protobuf(github上搜索protobuf,有种种语言可供选择)。选择protoc-3.9.0-win64.zip。下载完成之后解压到D:/protobuf目录下面就好了。

e7cd9b788437ec16b02bb17c1266a757.png

第二步:设置环境变量

也就是将D:\protobuf\protoc-3.9.0-win64\bin设置到path环境变量内里。

第三步:验证是否安装乐成

最后我们可以在cmd中输入protoc –version验证一下,是否乐成。

55f9deb7ddafb10057da6cdcb1dd205c.png

OK,到这里我们就安装好了。

2、编写proto文件

之前我们说过proto 文件异常类似java的bean。在这里我们在bin目录下新建一个Person.proto文件(和proto.exe)。输入下列内容:

86833ca7e0416b14cc0f62c2053d45b4.png

我们注释一些我们都写了什么

(1)第一行有一个proto3,他示意的是protobuf的语法版本,就类似于jdk1.7和jdk1.8的观点。需要在第一行指定。默认使用的是proto2。

(2)java_package:示意的是java包,不指定就使用 package.天生的类会放到该package下。这里示意把天生的类存放在com.fdd.protobuf包下面。

(3)java_outer_classname:我们说过.proto文件,要天生对应的类,这个参数就指定输出什么类名。这里示意天生的类名是PersonProto。

(4)message 是用于数据花样界说.

一个.proto文件中可以界说多个 message

message 中界说的字段支持 string、byte、bool、map、enum、数字类型和用户自界说的 message

界说字段后面需要指定唯一的标识数字,这些数字用于识别二进制花样 message 中的字段,一旦开始使用这个 message,那么标识数字就不能改变

若是需要界说 List,则在字段前加repeated即可.

若是已经使用过该 message 天生的类后,想要增添字段直接新增即可.当新增字段的类剖析老数据时,会将新字段置为默认值.当旧的类剖析新数据时会忽视掉新增字段.

比如说这里我们就界说一个庞大的proto文件:

42a86bea7ae5c39c220b9b79ca393e28.png

由于这里只是展示一个基本案例,对于其他的数据类型可以凭据自己的需要界说即可。

3、凭据proto文件天生class类文件

编译起来很简朴,在我们下载好的protobuf下面有一个bin目录,内里有一个proto.exe。我们就使用这个去编译person.proto文件就好。

77da09fdf452b16ec1c0d86484bab643.png

也就是执行proto.exe –java_out = / Person.proto就会编译乐成。

032c91b877cc6e24beccad2f43636cac.png

4、使用class类文件

上面意味着我们已经做好了序列化的准备工作,接下来我们就可以直接使用这个类了。

(1)第一步:将天生的PersonProto类引入到我们的IDEA或者是eclipse中。

(2)第二步:在idea或者是eclipse添加protobuf的依赖。

1915dafcda689b1e397f63c0fe139a68.png

(3)第三步:使用

首先看一些若何序列化:

2cf437c6dbba9b914a2a9163fd2dda65.png

然后反序列化

df82bf6321a495a14026885ffd4030de.png

简朴吧,基本上就是我们界说好proto文件,然后使用proto.exe编译成类文件,最后导入这个类和依赖就可以直接使用了。固然这只是一个最简朴不外的代码,可以把这篇教程当成一个简朴的使用教程。一样平常情形是是连系SpringBoot来使用的。详细使用会陆续推出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值