Java 序列化及解决方案

  想要深入了解序列化,首先得提出几个问题:

  · 序列化具体是什么。

  · 序列化应用场景。

  · 序列化方案有哪些。

  · 序列化方案如何应用。

  序列化简介

  定义:Java序列化是指把Java对象转换为字节序列的过程;Java反序列化是指把字节序列恢复为Java对象的过程。

  解析:简单来说,序列化只针对失血对象,所谓失血对象是指只有属性和getter/setter方法的数据类,不包含业务逻辑。序列化过程是使用固定格式的数据来描述对象的属性信息。反序列化过程是从描述对象属性信息的固定格式数据获取信息,来构造对象。

  序列化应用场景

  实际应用中,某些对象需要暂时存储起来,需要使用的时候,恢复其数据状态;某些需求中,需要将某个对象锁承载的信息通过网络传输到指定目的地。上面列举这些情况,需要使用序列化技术,将描述对象属性信息的固定格式数据存储或传输,再次使用时,从存储或网络下载描述文件,从文件获取对象数据,并生成对象。

  序列化方案

  · Java原生序列化

   · 实现java.io.Serializable接口

   · 实现java.io.Externalizable接口

  · Json序列化方式

​   · Fastjson

   · Jackson

​   · Gson

   · Jsonsmart

  · Xml序列化方式

​   · Java JAXB

   · XStream

  · 二进制方式

   · Hessian

   · Protocol Buffers

   · Protostuff

   · Flat Buffers

   · Apache Avro

   · Apache Kyro

​   · Apache Thrift

   · MessagePack

   · Dimbin

  以上罗列的解决方案,大致覆盖了常用的所有序列化方案,个人认为在实际应用中,针对不同的解决方案,都是有利有弊的,要结合业务场景、系统需求选择适合的方案。

  影响到解决方案选择包含很多方面。若系统用户量上限固定,且业务并发小、频率低的可以选用报文结构更加清晰的Json或Xml序列化方式,可以在开发、调试、后期运维上解决问题提供更直观的展示。若系统繁杂,用户量预估会随时间呈某种函数增长,业务并发高、频率高、通信负载大,此时可以选择占用空间较小的序列化方式,如Protocol Buffers、Flat Buffers等。

  对于解决方案的选择,个人见解想要表达一下,任何时候选择解决方案,不是必须选择测试数据最漂亮的一个,而是要选择最适合业务场景的一个,测试数据越漂亮的方案,对于某种平台的针对性越强、实现越复杂,考虑到对接系统的实现平台、业务需求的时间节点等等因素,选择时,希望不要轻易下结论,而是更多的搜集类似系统的发展曲线等方面,来确定解决方案。

  方案实现

  针对上面所列序列化方案,在之后的博文中会一一进行演示和解析,最后会对方案进行测试对比,但是如上所述,测试对比数据仅供参考,只代表某种方案在某些方面存在短板,并不代表这种方案已经不可作为候选。

  在对上面序列化进行演示和解析时,会提供每种序列化方式的工具类,方便大家使用。

猜你喜欢

转载自blog.csdn.net/securitit/article/details/106694223