import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.ObjectStreamException; import java.io.Serializable; public class Test9 { public static class MyObject implements Serializable { private static final long serialVersionUID = -7851379793524450347L; private static MyObject instance; public static MyObject newInstance() { if (instance == null) { synchronized (MyObject.class) { if (instance == null) { instance = new MyObject(); } } } return instance; } //若是不加這個方法,反序列化時獲得的實例就不同了 protected Object readResolve() throws ObjectStreamException { System.out.println("readResolve 被調用了"); return newInstance(); } } public static void writObject(Object object) throws IOException{ System.out.println(object.hashCode()); FileOutputStream fos = new FileOutputStream(new File("E:/MyObject.txt")); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(object); oos.close(); fos.close(); } public static Object readObject(String path) throws IOException, ClassNotFoundException{ FileInputStream fis = new FileInputStream(new File(path)); ObjectInputStream ois = new ObjectInputStream(fis); Object result = ois.readObject(); ois.close(); fis.close(); System.out.println(result.hashCode()); return result; } public static void main(String[] args) throws IOException, ClassNotFoundException { MyObject object = MyObject.newInstance(); writObject(object); readObject("E:/MyObject.txt"); } }