public static void writeObj() throws FileNotFoundException, IOException {
//将文件与文件输出流相关联
FileOutputStream fos = new FileOutputStream("C:\\Users\\悠悠华\\Desktop\\test\\obj.object");
//将文件输出流与对象输出流相关联
ObjectOutputStream oos = new ObjectOutputStream(fos);
//Person类必须实现Serialiable接口
Person p = new Person("Tom", 20);
//调用writeObject方法输出可序列化对象
oos.writeObject(p);
//关闭流
oos.close();
}
public static void readObj() throws IOException, ClassNotFoundException {
//将存储对象的文件与读取流相关联
FileInputStream fis = new FileInputStream("C:\\Users\\悠悠华\\Desktop\\test\\obj.object");
//将对象读取流与文件读取流相关联
ObjectInputStream ois = new ObjectInputStream(fis);
//调用对象读取流的readObject方法
Person p = (Person) ois.readObject();
System.out.println(p.getName()+"::"+p.getAge());
//关闭流
ois.close();
}
对象序列化 需要实现Serializable接口 这是一个标记接口 不需要实现任何方法
用于给被序列的类加入ID号,用于判断类和对象是否是一个版本
譬如:name的原来修饰符是private 序列化后 将修饰符改为public 再次读取序列化的对象就会报错。
注意:一个类的所有非瞬态和非静态的都不会被序列化
非静态好理解,就是如果某个属性是static的就不会序列化,因为静态数据单独放在方法区
当一个属性是公共的,那么就不能static,但是我们不想使这个属性序列化,那么我们就可以使用非瞬态,
关键字是transient 例子:private transient int age;