2016-03-02 64 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