在我们开发项目的时候有时候就会遇到对象序列化和反序列化的问题,有时我们根本就不知道对象序列化和反序列化是什么。现在就让我为大家讲解一下我的心得。
我们都知道每一个对象或者变量都是有生命周期的,超出了这个什么周期,对象就有可能被销毁,也不一定会销毁。这个主要是看垃圾回收机制的心情。在两个服务器之间传递信息的时候对象的生命周期就明显的不够了,就像一个客户端向服务端传递一个对象信息,但是这个对象的生命周期超出了范围,有可能被销毁怎么办呢?这样我们就应该先将这个对象保存下来,保存的形式有多种。然后在通过字节流的形式传递给服务端。(并不是每一个接口都需要传递对象信息但是也有一些接口模式是这样做的比如restful接口基于SpringMVC形式的)
现在我们先将对象序列化:
先定义一个实体类(Person),让这个类实现Serializable接口,
import java.io.Serializable;
public class Person implements Serializable {
int age;
int height;
String name;
public Person(String name, int age, int height){
this.name = name;
this.age = age;
this.height = height;
}
}
我们将这个对象输出到字节流中,也就是序列化的过程。也可以保存在文件中(这个有兴趣的可以做一下)
public static void main(String[] args) {
Person zhangsan = new Person("zhangsan", 30, 170);
Person lisi = new Person("lisi", 35, 175);
Person wangwu = new Person("wangwu", 28, 178);
try {
//需要一个文件输出流和对象输出流;文件输出流用于将字节输出到文件,对象输出流用于将对象输出为字节 ,这个过程也是序列化的过程。
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.ser"));
out.writeObject(zhangsan);
out.writeObject(lisi);
out.writeObject(wangwu);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
我们也看到了序列化其实就是讲对象进行一个保存或者是写入到字节流中,然后反序列化相信大家都知道怎么回事了。
现在就写一个反序列化的代码然后验证一下。
</pre>输出结果如下:<pre name="code" class="sql">[java] view plaincopy
name:zhangsan age:30 height:170
name:zhangsan age:35 height:175
name:zhangsan age:28 height:178