序列化:对象的寿命通常随着生成该对象的程序的终止而终止,有时候需要把在内存中的各种对象的状态(也就是实例变量,不是方法)保存下来,并且可以在需要时再将对象恢复。虽然你可以用你自己的各种各样的方法来保存对象的状态,但是Java给你提供一种应该比你自己的好的保存对象状态的机制,那就是序列化。
实现序列化的目的是想把的内存中的对象状态保存到一个文件中或者数据库中时候。废话不多说,上代码:
package chapter1; import java.io.Serializable; public class Person implements Serializable{ /** * */ private static final long serialVersionUID = 1L; String name; int age; public Person(String name,int age) { this.name = name; this.age = age; } public String toString(){ return "name:"+name+" age:"+age; } }
package chapter1; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Read { public static void main(String[] args) throws IOException, ClassNotFoundException { File file = new File("C:/Users/Administrator/Desktop/read.txt"); FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); for(int i=0;i<10;i++){ Person person = new Person("person"+i,i); System.out.println(person); oos.writeObject(person); } System.out.println(); FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); for(int i=0;i<10;i++){ Person p = (Person)ois.readObject(); System.out.println(p); } } }
输出结果:
name:person0 age:0 name:person1 age:1 name:person2 age:2 name:person3 age:3 name:person4 age:4 name:person5 age:5 name:person6 age:6 name:person7 age:7 name:person8 age:8 name:person9 age:9 name:person0 age:0 name:person1 age:1 name:person2 age:2 name:person3 age:3 name:person4 age:4 name:person5 age:5 name:person6 age:6 name:person7 age:7 name:person8 age:8 name:person9 age:9
如果去掉person类中实现序列化的接口,将会爆出错误:
Exception in thread "main" java.io.NotSerializableException: chapter1.Person at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.writeObject(Unknown Source) at chapter1.Read.main(Read.java:19)删除file中的read文档之后,重新执行程序,不会发生错误,将自动重新创建一个新的文档,仍然是read.txt