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序列化的高效率是如何实现的?