在《使用Objenesis实例化java对象》中我们提到了创建一个对象的示例的场景中,有这么一条是将序列化之后的对象重新反序列化为Java对象,那么本篇将就在这一点上,介绍说明下使用Protostuff对Java对象进行序列化和反序列化操作首先。
引子
关于为何要序列化、如何序列化可以参看下https://www.cnblogs.com/wugongzi/p/14345859.html,这里不做额外说明,需要了解到的是,我们一般提到的java对象序列化的方案大致可分为如下几种
- Java自身提供的序列化功能,需要实现Serializable接口或者Externalizable接口,并使用java的IOStream进行序列化和反序列化的操作
- 使用第三方库进行JSON或者XML格式的序列化,XML序列化的好处在于可读性好,方便阅读和调试。但是序列化以后的 字节码文件比较大,而且效率不高,适应于对性能不高,而且QPS较低的企业级内部系统之间的数据交换的场景。相对于XML来说,JSON的字节流较小,而且可读性也非常好,应用也非常普遍的。常用的有Jackson、阿里的Fastjson、谷歌的Gson等
- 除此之外,Protobuf也是一个非常广泛应用的选择,Protobuf是Google的一种数据交换格式,它独立于语言、独立于平台。Protobu解析性能比较高,序列化以后数据量相对较少,适合应用在对象的持久化场景中。但是不同于前面提到的几个方法,要使用 Protobuf 会相对略麻烦些,他有自己的语法,自己的编译器
和Protobuf类似、Protostuff也是谷歌的产品,它是基于Protobuf发展而来的,相对于Protobuf提供了更多的功能和更简易的用法。其中,protostuff-runtime实现了无需预编译对Java Bean进行protobuf序列化/反序列化的能力。protostuff-runtime的局限是序列化前需预先传入schema,反序列化不负责对象的创建只负责复制,因此必须提供默认构造函数。在性能上,Protostuff不输原生的Protobuf,甚至有反超之势
Continue reading