Java序列化

阅读更多

一、 为什么要JAVA序列化

    Java序列化机制是解决Java对象本身在网络中传输的问题的,所以序列化的重点是描述了类的内容,这个内容具体包括那些内容取决于使用的场景,不是越多越好,越详细越好,在技术的选型中往往最适合自己的才是最好,本文介绍常见的序列化方法。

    有序列化当然有反序列化,序列化本身是一种编码和解码的过程。

 

二、常用的序列化方法

1. JDK自带的序列化方法

    JDK中序列化的方法是通过让你的类实现Serializable接口来完成, 然后通过ObjectOutputStream和ObjectInputStream来写入和读出。

     谈到JDK的序列化要注意序列化的serialVersionUID同时还有禁止字段序列化的关键字Transient。

     真正使用的时候我们很少用到自带的的序列化方法,总结下来原因主要有两个。

     1) 序列化中含有太多的信息,这些信息通常不会被使用,但是会带来效率和流量的额外开销。

     2) 使用较为复杂,有比较多的约束和坑如ID问题,版本问题。

 

2. JSON序列化(格式化)

    利用现有的JSON工具把java对象转换成json字符串,然后使用的时候再把字符串转换成java对象。XML也是属于对象与文本的方式,一些古老的系统还用着这类方法。

    典型的json序列化,包括但不局限与jackson,fastjson,gson,jsonp等。

 

3. 二进制序列化

    随着系统的复杂度提高,系统通信变得越来越复杂,对性能越来越高,虽然json序列化性能不错,但是字符串的开销还是会比直接存二进制的开销大很多,所以就出现了很多二进制的序列化方案。

   如dubble 默认的 hessian2,kryo, fst。

 

4.  中间件自己的序列化方案

    尽管序列化技术越来越成熟了,但是很多中间件仍然选择自己的序列化方案,如消息系统kafka 等。

  

三、性能对比

下表是网络上找的集中序列化方法的对比,可以简单了解下,但是不能作为具体的技术选型的依据,因为对比没有时间版本的维度,没有具体场景所以真正选择的时候还需要自己做一些实验。

序列化实现 请求字节数 响应字节数
Kryo 272 90
FST 288 96
Dubbo Serialization 430 186
Hessian 546 329
FastJson 461 218
Json 657 409
Java Serialization 963 630

 

 

 

 

你可能感兴趣的:(序列化)