一、概叙
为了方便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