森林里的程序猿三木 2019-10-10 23:52 采纳率: 0%
浏览 158

序列化单例和类型安全的枚举

在看书,JAVA核心技术卷二里的一节内容
有下面一段枚举类型:

 public class Orientation
    {
        public static final Orientation HORIZONTAL = new Orientation(1);
        public static final Orientation VERTICAL = Orientation(2);
        private int value;
        private Orientation(int v)
        {
            value = v;
        }
    }


         Orientation original = Orientation.HORIZONTAL;
       ObjectOutputStream out = new ObjectOutputStream(,,,);
        out.write(original);
        out.close();
        ObjectInputStream in = new ObjectInputStream(...);
        Orientation saved = (Orientation) in.read();

这里说序列化创造了新的对象,saved的值就是Orientation类型一个全新的对象,那么为什么不可将读入流in中的Orientatio读入,等号后还有和意义,还是说读出流out中或者读入流in中根本就没有这个对象。
初学者,谢谢各位传道解惑

  • 写回答

1条回答 默认 最新

  • 毕小宝 博客专家认证 2019-10-11 08:56
    关注

    序列化后重新读取到内存中的实例对象的确跟之前的对象不是同一个实例对象了,这也是单例对象的一个漏洞,单例对象通过序列化到磁盘后反序列化得到了一个新对象后,内存中就多了一个单例类型的实例,而打破单例的唯一性了。

    评论

报告相同问题?

悬赏问题

  • ¥15 chaquopy python 安卓
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题