2016-03-02 65 views
3
public static class Singleton implements Serializable { 
    private static Singleton ourInstance; 

    public static Singleton getInstance() 
    { 
     if (ourInstance == null) 
     { 
      ourInstance = new Singleton(); 
     } 
     return ourInstance; 
    }  
    private Singleton() { 
    } 
} 

 Singleton instance = Singleton.getInstance(); 
    objectOutputStr.writeObject(instance); 
     Singleton singleton1 = (Singleton) objInputStr.readObject(); 
     Singleton singleton2 = (Singleton) objInputStr.readObject(); 
     System.out.println(singleton1);//A 
     System.out.println(singleton2);//B 

为什么用于singleton1和singleton2不同的输出(线标为A和B)。是否有可能使两个引用相同。与我添加如下行Java序列化。不同的引用

+1

你正在写一个实例的流,那么你读了两遍。这不会像你发布的那样工作。 – f1sh

+0

Ops,有人在编辑我的回复时关闭了这个问题: – idelvall

+0

Singleton意味着这个对象是这个类的唯一实例。 这只在运行时有意义**,并且完全是间接的(取决于您的应用程序逻辑,而不是任何语言限制)。所以序列化过程不能存储这个对象的这个特征。另一方面,序列化协议不存储关于实例号或id的任何其他信息,换句话说,具有相同结构的不同实例在序列化之后是不可区分的。 所以不行,这是不可能的,当然,除了你在你的应用逻辑中处理这个。 – idelvall

回答

0

尝试重新运行应用程序:

Singleton instance = Singleton.getInstance(); 
    objectOutputStr.writeObject(instance); 
    Singleton singleton1 = (Singleton) objInputStr.readObject(); 
    objectOutputStr.writeObject(instance); //Added an additional write to stream 
    Singleton singleton2 = (Singleton) objInputStr.readObject(); 
    System.out.println(singleton1);//A 
    System.out.println(singleton2);//B 
+0

谢谢,但这是我的错误 - objectoutputstreams可以是不同的。但结果将是相同的 – kurumkan