标签:style blog http color java 使用 os io
序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。序列化分为两大部分:序列化和反序列化。
对于父类的处理,如果父类没有实现序列化接口,则其必须有默认的构造函数(即没有参数的构造函数)。否则编译的时候就会报错。在反序列化的时候,默认构造函数会被调用。但是若把父类标记为可以序列化,则在反序列化的时候,其默认构造函数不会被调用。这是为什么呢?这是因为Java 对序列化的对象进行反序列化的时候,直接从流里获取其对象数据来生成一个对象实例,而不是通过其构造函数来完成。
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; /** * Author: Leo Sun * Blog: http://kaffa.im/ * Date: Aug 12, 2014 */ public class SerializableDemo { public static void main(String[] args) { Cat cat = new Cat(); try { FileOutputStream fos = new FileOutputStream("catDemo.out"); ObjectOutputStream oos = new ObjectOutputStream(fos); System.out.println(" 1> " + cat.getName()); cat.setName("My Cat"); oos.writeObject(cat); oos.close(); } catch (Exception ex) { ex.printStackTrace(); } try { FileInputStream fis = new FileInputStream("catDemo.out"); ObjectInputStream ois = new ObjectInputStream(fis); cat = (Cat) ois.readObject(); System.out.println(" 2> " + cat.getName()); ois.close(); } catch (Exception ex) { ex.printStackTrace(); } } } class Cat implements Serializable { private static final long serialVersionUID = -5426949996723910122L; private String name; public Cat() { this.name = "new cat"; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } }
注:writeObject和readObject本身就是线程安全的,传输过程中是不允许被并发访问的。所以对象能一个一个接连不断的传过来
Serializable接口的背后,布布扣,bubuko.com
标签:style blog http color java 使用 os io
原文地址:http://www.cnblogs.com/fuxinci/p/3908581.html