对象序列化就是把一个对象变为二进制数据流的一种方法。如果一个类的对象想被序列化,它要实现Serializable接口,这个接口是个标识接口(只定义了接口,并没有定义方法),表示这个对象具有被序列化的能力。
实现Serializable接口之后,表示这个类具有被数据流传输的能力,如果想进行输入和输出,要使用两个类:ObjectOutputStream 和 ObjectInputStream
序列化时,只有属性被序列化
如果一个对象的某个属性不希望被序列化,可以使用transient关键字声明(把这个属性当成透明,在序列化时不予考虑)。
Serializable接口使用:
import java.io.*; public class Test { public static void main(String[] args)throws Exception { try{ ObjectOutputStream oos = null; ObjectInputStream ois = null; File f = new File("e:\java\Person.txt"); OutputStream os = new FileOutputStream(f); InputStream is = new FileInputStream(f); oos = new ObjectOutputStream(os); ois = new ObjectInputStream(is); Person p1 = new Person(23,"宝宝",180.00); oos.writeObject(p1); oos.close(); Person p2 = (Person)ois.readObject(); ois.close(); System.out.println(p2); }catch(IOException e) { e.printStackTrace(); } } } class Person implements Serializable { int age = 8; String name; transient double height = 170;//transient声明的变量在序列化时不予考虑,所以在反序列化时就是默认值0 Person(int age,String name,double height) { this.age = age; this.name = name; this.height = height; } public String toString() { return "姓名:" + this.name + " 年龄:" + this.age + " 身高:" + this.height; } }