首页 > 编程知识 正文

protobuf序列化存入数据库(protobuffer序列化)

时间:2023-05-06 00:49:08 阅读:88511 作者:2307

我以前提到过java所拥有的序列化机制,但这种机制效率低下,有很多缺点。 因此,也出现了许多优秀的系列化框架,如protobuf、protostuff、thrift、hession、kryo、avro、fst、MSG包等。 本文将看到第一个序列化框架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 -双赢64.zip 下载完成后,解压缩到D:/protobuf目录下即可。

步骤2 :设定环境变量

也就是说,将d :proto bufprotoc-3.9.0-win 64wnd LD放置在路径环境变量中。

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

最后,在cmd中输入protoc --version,验证是否成功。

OK,来这里就安装。

2、制作proto文件

我之前说过proto文件和java的bean非常相似。 在本例中,我们将在wndld目录下创建一个新的Person.proto文件(和proto.exe )。 输入以下内容:

我们来说明写了什么

1 )第1行有proto3,他表示protobu

f的语法版本,就类似于jdk1.7和jdk1.8的概念。需要在第一行指定。默认使用的是proto2。

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

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

(4)message 是用于数据格式定义.

一个.proto文件中可以定义多个 messagemessage 中定义的字段支持 string、byte、bool、map、enum、数字类型和用户自定义的 message定义字段后面需要指定唯一的标识数字,这些数字用于识别二进制格式 message 中的字段,一旦开始使用这个 message,那么标识数字就不能改变如果需要定义 List,则在字段前加repeated即可.如果已经使用过该 message 生成的类后,想要增加字段直接新增即可.当新增字段的类解析老数据时,会将新字段置为默认值.当旧的类解析新数据时会忽视掉新增字段.

比如说这里我们就定义一个复杂的proto文件:

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

3、根据proto文件生成class类文件

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

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

4、使用class类文件

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

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

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

(3)第三步:使用

首先看一些如何序列化:

然后反序列化

简单吧,基本上就是我们定义好proto文件,然后使用proto.exe编译成类文件,最后导入这个类和依赖就可以直接使用了。当然这只是一个最简单不过的代码,可以把这篇教程当成一个简单的使用教程。一般情况是是结合SpringBoot来使用的。具体使用会陆续推出。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。