序列化单例

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
上一篇 下一篇

猜你喜欢

热点阅读