@SuppressWarnings("serial")
public class OnlySingleton implements Serializable {
private static OnlySingleton singleton = new OnlySingleton();
private OnlySingleton() {}
public static OnlySingleton getInstance() {
return singleton;
}
/**
* 反序列化时内存Hook这段代码
* @return
*/
private Object readResolve() {
return singleton;
}
}
public class SingletonSerializableTest {
@Test
public void testSingletonSerializable() throws IOException, ClassNotFoundException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
OnlySingleton singleton = OnlySingleton.getInstance();
oos.writeObject(singleton);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
OnlySingleton clone = (OnlySingleton) ois.readObject();
System.out.println(singleton);
System.out.println(clone);
}
}