Hessian序列化和JDK源生序列化对比

package json;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.math.BigInteger;

/* Java序列化允许将一个对象状态写入Byte流里 */
/* 并且可以从其他地方把该Byte流的数据读出来 */
public class InnerSer {

    public static void main(String[] args) {
        try {
            /* 序列化 */
            A a = new A("A", "100");
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(os);
            oos.writeObject(a);
            byte[] byteArray = os.toByteArray();
            System.out.println("序列化后的二进制:" + new BigInteger(1, byteArray).toString(2));

            /* 反序列化 */
            ByteArrayInputStream is = new ByteArrayInputStream(byteArray);
            ObjectInputStream ois = new ObjectInputStream(is);
            System.out.println("反序列化后的对象" + ois.readObject().getClass().getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class A implements Serializable {

    private String name;
    private String age;

    public A(String name, String age){
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

问题:
Java源生的序列化技术使用方式和Hession的序列化使用方式都差不多的,都是像代码中一样,先用writeObject方法将对象写入字节数组中,再通过readObject()方法将字节数组反序列化为对象。有区别的地方只是,在java中使用了ByteArrayOutputStream ObjectOutputStream 和ByteArrayInputStream ObjectInputStream,而在Hession中使用的是ByteArrayOutputStream HessionOutput 和ByteArrayInputStream HessionInput。
1.为什么项目中宁愿用Hession都不用源生的JDK呢?
2.Hession比JDK序列化的高效率是如何实现的?

阅读 5.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题