guguoyi / shareber

7 stars 0 forks source link

2018-11-30[Jimmy Ma] Singleton #2

Closed imaegoo closed 3 years ago

imaegoo commented 5 years ago

Singleton class:

import java.io.Serializable;

public enum SingletonEnum implements Serializable {
    INSTANCE;
    public void showMessage() {
        System.out.println("SingletonEnum");
    }
}

Test:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class BreakSerializableSingleton {
    public static void main(String[] args) {
        SingletonEnum s1 = SingletonEnum.INSTANCE;
        SingletonEnum s2;
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("b.bin"));
            oos.writeObject(s1);
            oos.flush();

            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("b.bin"));
            s2 = (SingletonEnum) ois.readObject();

            s1.showMessage();
            s2.showMessage();
            System.out.println(s1);
            System.out.println(s2);
            System.out.println(s1 == s2);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Result (output):

SingletonEnum
SingletonEnum
INSTANCE
INSTANCE
true