一些面试题,自己总结的,也是自己觉得应该深入理解的问题。
1、单例模式经过序列化和反序列化时产生的对象一致吗?如果不一致的话如何解决?
http://blog.csdn.net/huangbiao86/article/details/6896565
/**
* Singleton pattern with serializable
* @author Peter Zhang
* @since 2015-4-28
* @version
*/
public class SeriaSingleton implements Serializable {
private static final long serialVersionUID = 1L;
private final static SeriaSingleton INSTANCE = new SeriaSingleton();
private SeriaSingleton() {
}
public static SeriaSingleton getInstance() {
return INSTANCE;
}
//important
public Object readResolve() {
return INSTANCE;
}
}
/**
* 单例模式序列化和反序列化会产生多个实例对象,如果加上readResolve就会产生同一个对象
* @throws Exception
*/
@Test
public void tSeriaSingleton() throws Exception {
final String path = "D:/workspace/Practise/src/com/javapattern/singleton/test.txt";
SeriaSingleton expected = SeriaSingleton.getInstance();
//serializable and deserializable
FileOutputStream fos = new FileOutputStream(new File(path));
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(expected);
FileInputStream fis = new FileInputStream(new File(path));
ObjectInputStream ois = new ObjectInputStream(fis);
SeriaSingleton actual = (SeriaSingleton) ois.readObject();
Assert.assertEquals(expected, actual);
}