欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java序列化

程序员文章站 2022-04-03 22:13:02
...

一、 为什么要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

 

 

 

 

相关标签: 序列化