序列化单例
2019-12-19 本文已影响0人
估计精确
序列化单例
package com.ysh.singleton.serializable;
import java.io.Serializable;
// 饿汉式 单例 对象 基础上 模拟 序列化
public class SingletonHungryMy implements Serializable {
private SingletonHungryMy() { }
public static int num = 3;
private final static SingletonHungryMy sing = new SingletonHungryMy();
public static SingletonHungryMy getInstance() {
return sing;
}
// 加上该方法, 就会保证 s1 和s2 是同一个对象了
/**
* 该方法是 序列化和反序列化的 一个协议, 是否jvm 自己去判断 调用的,保证对象的一个重复利用
*/
private Object readResolve() {
return sing;
}
}
测试类
private static void myTest() {
SingletonHungryMy s1 = SingletonHungryMy.getInstance();
SingletonHungryMy s2 = null;
try {
//将 s1 对象 从内存中 写到磁盘上
FileOutputStream outputStream = new FileOutputStream("SingletonHungryMy.obj");
ObjectOutputStream oos = new ObjectOutputStream(outputStream);
oos.writeObject(s1);
s1.num=5;
s1=null;
//将磁盘上的 s1 读取进来 赋值给s2
// 在转换过程中 会重新创建对象new
FileInputStream inputStream =new FileInputStream("SingletonHungryMy.obj");
ObjectInputStream ooi = new ObjectInputStream(inputStream);
s2 = (SingletonHungryMy) ooi.readObject();
System.out.println(s1);
System.out.println(s1.num);
System.out.println(s2);
System.out.println(s2.num);
System.out.println(s1 ==s2);
} catch (Exception e) {
e.printStackTrace();
}
}
输出结果
null
5
com.ysh.singleton.serializable.SingletonHungryMy@61bbe9ba
5
false