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