序列化與返序列化的單例模式實現

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");
	}

}
相關文章
相關標籤/搜索