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
Teilen Sie den gesamten Code speziell, wie Sie serialisieren und deserialisieren –
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. –
Dies ist meine Testklasse, die ich vergessen habe einzufügen :: –