对象序列化就是将一些对象写入到硬盘中存储起来,以便下次复用
1 import java.io.FileInputStream; 2 import java.io.FileOutputStream; 3 import java.io.IOException; 4 import java.io.ObjectInputStream; 5 import java.io.ObjectOutputStream; 6 7 public class ObjectStreamDemo { 8 9 public static void main(String[] args) throws IOException, ClassNotFoundException { 10 //WriteObj(); 11 ReadObj(); 12 } 13 14 public static void WriteObj() throws IOException { 15 16 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("F:\obj.object")); 17 18 //对象序列化,被序列化的对象必须实现Serializable接口 19 oos.writeObject(new Person("jianfeng",21)); 20 21 oos.close(); 22 } 23 24 public static void ReadObj() throws IOException, ClassNotFoundException { 25 26 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("F:\obj.object")); 27 28 //对象的反序列化 29 Person p = (Person)ois.readObject(); 30 31 System.out.println(p.getName()+"::"+p.getAge()); 32 } 33 34 35 }
1 import java.io.Serializable; 2 /* 3 * Serializable :用于给被序列化的类加入ID号的 4 * 用于判断类和对象是否是同一个版本,这就是该接口存在的原因 5 * */ 6 public class Person implements Serializable/*标记接口*/{ 7 8 //显示声明该类的ID号,(如果没给这个类加上ID号,将这个对象序列化后,这个类改变了,在进行反序列化的时候就会出错) 9 private static final long serialVersionUID = 12345L; 10 11 //transient:非静态数据不想被序列化可以使用这个关键字修饰(用静态修饰的数据也不会被序列化,但是该属性是不应该静态的,因为不是共享数据,那么就可以使用该修饰符了) 12 public String name; 13 private int age; 14 15 public Person(String name, int age) { 16 super(); 17 this.name = name; 18 this.age = age; 19 } 20 public String getName() { 21 return name; 22 } 23 public void setName(String name) { 24 this.name = name; 25 } 26 public int getAge() { 27 return age; 28 } 29 public void setAge(int age) { 30 this.age = age; 31 } 32 }