0717-7821348
关于我们

欢乐彩票app下载

您现在的位置: 首页 > 关于我们 > 欢乐彩票app下载
欢乐彩票登录网址-java序列化机制之protostuff
2019-09-06 22:12:52

之前从前写了两篇java的序列的机制,一种是默许的java序列化机制,这种办法功率太低。别的一种是谷歌的protobuf,可是这种咱们还要写proto文件,而且咱们还要运用东西来编译生成java文件,实在太费事。可是protostuff却不相同,能够很好的处理上面两者的问题。这篇文章就研究一下怎么去运用,并对其进行一个简略的剖析。

一、知道prot欢乐彩票登录网址-java序列化机制之protostuffostuff

其实protostuff也是有局限性的,比如说在序列化的文件在10M以下的时分,仍是运一无所有用java自带的序列化机制比较好,可是文件比较大的时分仍是protostuff好一点,这儿的10M不是严厉的边界。

protostuff也是谷歌的产品,它是依据protobuf开展而来的,相关于protobuf供给了更多的功用和更简易的用法欢乐彩票登录网址-java序列化机制之protostuff。

废话不多说,直接看一下protoStuff是怎么运用的吧。

二、代码完成环境预备:增加依靠或者是jar

这儿我运用了maven,直接增加依靠即可,假如你没有运用maven,在百度上查找相应的jar包就好了。

1、界说要序列化的bean

首要是学生类

然后是校园类

在这儿咱们真实要序列化的是School,可是为了使得比如更有说服力,所以就在School里边界说了Student。

2、protoStuff序列化东西类

这其实便是一个东西类,这欢乐彩票登录网址-java序列化机制之protostuff儿面的代码能够不必更改,直接拿过来就能够运用了。不过在这儿有必要对里边的一些字段办法等进行一个阐明。

(1)字段LinkedBuffer

这个字段表明,请求一个内存空间用户缓存,LinkedBuffer.DEFAULT_BUFFER_SIZE表明请求了默许巨细的空间512个字节,咱们也能够运用MIN_BUFFER_SIZE,表明256个字节。

(2)字段schemaCache

这个字段表明缓存的Schema。那这个Schema是什么呢?便是一个安排结构,就好比是数据库中的表、视图等等这样的安排机构,在这儿表明的便是序列化目标的结构。

(欢乐彩票登录网址-java序列化机制之protostuff3)办法serialize

它是序列化办法,里边的代码很简略了解,首要取得要序列欢乐彩票登录网址-java序列化机制之protostuff化目标的类,然后为其分配一个缓存空间,其次取得这个类的Schema。最终一行代码ProtostuffIOUtil.toByteArray进行序列化。

(4)办法deserialize

表明反序列化,反序列里边的代码更简略了,首要依据序列化目标获取其安排结构Schema。然后依据byte直接mergeFrom成一个目标。

(5)办法getSchema

获取序列化目标的安排结构。

3、测验

运转一下就能呈现成果,很简略。上面的ProtostuffUtils是一个东西类,你能够保存下来,复制粘贴到任何地方运用。下面的小结是对其底层原理的解析,假如你仅仅简略的运用,到此就OK了。假如想深化了解能够接着往下看

三、protoStuf欢乐彩票登录网址-java序列化机制之protostufff底层是怎么完成序列化的?

上面仅仅给出了一个根本的运用,而且对Protostuff序列化东西类中的字段和办法进行了一个简略的介绍,在这儿咱们深化的去剖析一下究竟底层是怎么完成序列化和反序列化的,

在上面序列化办法中,最中心的其实便是最终一句:data = ProtostuffIOUtil.toByteArray(obj, schema, buffer);怎么完成序列化其实就在于这个toByteArray办法,咱们深化这个办法中看看:

咱们能够看到schema.writeTo(output, message);是真实的中心,咱们持续追进去看看:

本来里边还有一层,不要紧真实完成序列化的源头立刻就要浮出水面了

看到了吧其实便是把序列化目标信息保存成CharSequence,然后序列化。

关于反序列化呢?中心ProtostuffIOUtil.mergeFrom(data, obj, schema);咱们也追进去看看

想要弄清楚,就想持续追进去看:

持续进去看看

OK,真实立刻出来了,有点耐性持续跟进去:

到了这一步了,应该就理解了吧。