2016-08-30 3 views
0

Getting same Hashcode jedes Mal vor serialization und nach deserialization des Objekts ohne zu verwenden readResolve() Methode in Java, warum? Hier ist meine KlasseDen gleichen Hashcode jedes Mal vor der Serialisierung und nach der Serialisierung von Objekten erhalten, ohne die readsolve-Methode in Java zu verwenden, warum?

public class SerializedSingletonClass implements Serializable{ 

    private static final long serialVersionUID = 18989987986l; 

    private SerializedSingletonClass(){}; 

    private static class InstanceHelper { 
     private static SerializedSingletonClass obj = new SerializedSingletonClass(); 
    } 

    public static SerializedSingletonClass getInstance(){ 
     return InstanceHelper.obj; 
    } 
} 

Testklasse -

public class TestSingleton { 
public static void main(String[] args) throws FileNotFoundException, 
     IOException, ClassNotFoundException { 
    // Test Serialization for singleton pattern 
      SerializedSingletonClass instanse1 = SerializedSingletonClass 
        .getInstance(); 
      ObjectOutputStream obs = new ObjectOutputStream(new FileOutputStream(
        "filename1.ser")); 
      obs.writeObject(instanse1); 
      obs.close(); 
      ObjectInputStream objInputStream = new ObjectInputStream(
        new FileInputStream("filename1.ser")); 
      SerializedSingletonClass instance2 = (SerializedSingletonClass) objInputStream 
        .readObject(); 
      objInputStream.close(); 
      System.out.println("instance1==" + instanse1.getClass().hashCode()); 
      System.out.println("instance2==" + instance2.getClass().hashCode()); 
} 

}

Ausgabe ::

instance1 == 1175576547

instance2 == 1175576547

+0

Teilen Sie den gesamten Code speziell, wie Sie serialisieren und deserialisieren –

+2

Ich sehe nichts in diesem Ausschnitt, der die Ausgabe erzeugt, die Sie erwähnen. Wie berechnen Sie Hash-Codes und wie werden die Objekte serialisiert und deserialisiert? Und wenn Sie Ihre Hashing-Funktion ordnungsgemäß auf Hash-Werte basierend auf den tatsächlichen Werten des Objekts implementiert haben, würden Sie nicht * erwarten *, dass es nach dem Deserialisieren des Objekts gleich bleibt? Das scheint mir eine erfolgreiche Serialisierung zu sein. –

+0

Dies ist meine Testklasse, die ich vergessen habe einzufügen :: –

Antwort

0

Ihre Objekte sind Instanzen derselben Klasse, SerializedSingletonClass. Sie erhalten den hashCode von der Klasse und nicht von der Instanz. instanse1.getClass() wertet dasselbe wie instance2.getClass() aus, also erzeugen sie natürlich den gleichen hashCode.

Um den hashCode der Objekte zu finden, verwenden Sie instanse1.hashCode() und instance2.hashCode().

+0

Dank identifiziert das Problem, war mir nicht bewusst, dass die Klasse auch Hashcode hat und das ist anders als das Objekt. –

+0

@Sunil: Es ist leicht, verwirrt zu werden. –

Verwandte Themen