ホームページ  >  記事  >  Java  >  Java でのシリアル化と readResolve() メソッドの使用方法の詳細な説明

Java でのシリアル化と readResolve() メソッドの使用方法の詳細な説明

黄舟
黄舟オリジナル
2017-08-08 10:11:482599ブラウズ

この記事では、主に Java のシリアル化と readResolve() メソッドの詳細な説明に関する関連情報を紹介します。ここでは、この部分の知識を理解するのに役立つ例を示します。詳しくは、「Java のシリアル化と readResolve()」を参照してください。メソッド例の説明

readResolveメソッドの機能とは?このメソッドはオブジェクトのシリアル化に関連しています (これが、readResolve メソッドが非公開で変更される理由を説明しています)。 それはオブジェクトのシリアル化とどのように関係するのでしょうか?

次に、オブジェクトのシリアル化について簡単に見てみましょう。一般に、クラスが Serializable インターフェイスを実装している場合、それをメモリに書き込み、メモリから読み取って、元のオブジェクトとまったく同じオブジェクトに「組み立て」ることができます。ただし、シリアル化でシングルトンが発生すると、メモリから読み取られてアセンブルされたオブジェクトがシングルトンのルールに違反するという問題が発生します。シングルトンには JVM 内のクラス オブジェクトが 1 つだけ必要ですが、逆シリアル化によって新しいオブジェクトがクローン化されるようになりました。次の例に示すように:

Java コード:

public final class MySingleton implements Serializable { 
   private MySingleton() { } 
   private static final MySingleton INSTANCE = new MySingleton(); 
   public static MySingleton getInstance() { return INSTANCE; } 
}

MySingleton オブジェクト (getInstance メソッドを通じて取得されたシングルトン オブジェクト) がシリアル化されてメモリから読み取られると、新しいオブジェクトが存在しますが、同じものになります。元のオブジェクトとして MySingleton オブジェクトが存在します。では、シングルトン モードを維持するにはどうすればよいでしょうか?これには readResolve メソッドを使用する必要があります。 以下に示すように:


public final class MySingleton implements Serializable{ 
  private MySingleton() { } 
  private static final MySingleton INSTANCE = new MySingleton(); 
  public static MySingleton getInstance() { return INSTANCE; } 
  private Object readResolve() throws ObjectStreamException { 
    // instead of the object we're on, 
    // return the class variable INSTANCE 
   return INSTANCE; 
  } 
}

このように、JVM がメモリから新しいオブジェクトをデシリアライズして「アセンブル」すると、自動的に readResolve メソッドが呼び出され、指定したオブジェクトが返されます。また、シングルトン ルールも同様です。それは保証されました。

以上がJava でのシリアル化と readResolve() メソッドの使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。