2016-08-30 1 views
0

を取得するHashcodeの前に毎回serializationdeserializationのオブジェクトを使用せずにJavaでreadResolve()メソッドを使用するのはなぜですか? はここJavaでreadResolveメソッドを使用せずに、シリアル化の前とオブジェクトの直列化後に毎回同じハッシュコードを取得する理由は何ですか?

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; 
    } 
} 

テストクラス私のクラスである -

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()); 
} 

}

出力::

インスタンス1の== 1175576​​547

instance2 == 1175576​​547

+0

シリアル化と逆シリアル化の方法を特にコード全体を共有 –

+2

あなたが言及する出力を生成するスニペットには何も表示されません。どのようにしてハッシュコードを計算していますか、オブジェクトのシリアル化とデシリアライズはどのようにしていますか?また、オブジェクトの実際の値に基づいてハッシュ関数を正しく実装していれば、そのオブジェクトがデシリアライズされた後でも同じままになると期待できませんか?それは成功した[de]シリアライゼーションのようです。 –

+0

これは私のテストクラスです。:: –

答えて

0

オブジェクトは、同じクラスSerializedSingletonClassのインスタンスです。インスタンスからではなく、クラスからhashCodeを取得しています。 instanse1.getClass()instance2.getClass()と同じものになるので、もちろん同じhashCodeを生成します。

オブジェクトのhashCodeを見つけるには、instanse1.hashCode()instance2.hashCode()を使用します。

+0

が問題を識別してくれたことを忘れてしまいました。私はそのクラスもハッシュコードを持っていて、それはオブジェクトとは異なります。 –

+0

@Sunil:混乱するのは簡単です。 –

関連する問題