一、概叙

为了方便Java对象能够在网络间进行传输,我们需要将Java对象进行序列化。针对序列化我们不仅仅可以使用JDK提供的API,还有其他工具类,比如Hessian、Protobuff序列化、json序列化、Fast json序列化等方式。针对Java的序列化拥有很多缺点,无法跨语言,序列化的码流太大,序列化的性能太差。下面我们具体来看看这几种方式的实现。

二、Hessian

Hessian实现对象的序列化的具体过程如下:

package com.liutao.serializable;

import com.caucho.hessian.io.HessianInput;
import com.caucho.hessian.io.HessianOutput;
import com.liutao.IO.Person;

import java.io.*;

/**
 * @Author:LIUTAO
 * @Description:
 * @Date:Created in 18:31 2018/4/22
 * @Modified By:
 */
public class HessianDemo {
    static String file = "D:\\IdeaProjects\\hessian.out";
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Person person = new Person("liu","tao");
        //进行对象的序列化
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        HessianOutput hessianOutput = new HessianOutput(fileOutputStream);
        hessianOutput.writeObject(person);

        //进行字节流的反序列化
        FileInputStream fileInputStream = new FileInputStream(file);
        HessianInput hessianInput = new HessianInput(fileInputStream);
        Person person1 = (Person) hessianInput.readObject();
        System.out.println(person1);
    }
}

我们可以看见Hessian和JDK实现对象的序列化的过程是基本上相同的,那么使用Hessian和使用JDK进行序列化的优缺点到底有些啥呢?


(1)Java的序列化无法跨语言。
(2)新旧对象的版本Java可以通过一个serialVersionUID来处理,这就需要开发者关注序列化的几个语义。
(3)Java需要实现一个接口才能进行序列化和反序列化,序列化没有进行加解密的接口
(4)Java序列化后的内容比Hessian更大,这不利于序列化本身的性能和网络传输、以及存储的性能。

三、Protobuff