Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Verwendung der Serialisierung und der Methode readResolve() in Java

Detaillierte Erläuterung der Verwendung der Serialisierung und der Methode readResolve() in Java

黄舟
黄舟Original
2017-08-08 10:11:482600Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zu Serialisierungs- und readResolve()-Methodenbeispielen in Java vorgestellt. Hier finden Sie Beispiele, die Ihnen helfen, diesen Teil des Wissens zu verstehen.

Ausführliche Erklärung Beispiele für Serialisierung und die Methode readResolve() in Java

Welche Funktion hat die Methode readResolve? Diese Methode hängt mit der Serialisierung von Objekten zusammen (dies erklärt, warum die readResolve-Methode privat geändert wird). Wie hängt es mit der Serialisierung von Objekten zusammen?

Lassen Sie uns nun kurz die Serialisierung von Objekten betrachten. Wenn eine Klasse die Serializable-Schnittstelle implementiert, können wir sie im Allgemeinen in den Speicher schreiben und aus dem Speicher lesen, um sie zu einem Objekt zusammenzusetzen, das genau dem Original entspricht. Wenn die Serialisierung jedoch auf einen Singleton trifft, gibt es ein Problem: Das aus dem Speicher gelesene und zusammengesetzte Objekt verstößt gegen die Regeln des Singletons. Ein Singleton erfordert nur ein Klassenobjekt in einer JVM, aber jetzt wird durch Deserialisierung ein neues Objekt geklont. Wie im folgenden Beispiel gezeigt:

Java-Code:


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

Wenn das MySingleton-Objekt (das über die getInstance-Methode erhaltene Singleton-Objekt) serialisiert wird Wenn es aus dem Speicher gelesen wird, existiert ein neues, aber identisches MySingleton-Objekt. Wie kann der Singleton-Modus beibehalten werden? Dies erfordert die Verwendung der readResolve-Methode. Wie unten gezeigt:


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

Auf diese Weise wird dieses readResolve automatisch aufgerufen, wenn die JVM ein neues Objekt aus dem Speicher deserialisiert und „zusammensetzt“. Methode, um das von uns angegebene Objekt zurückzugeben, und die Singleton-Regel ist garantiert.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der Serialisierung und der Methode readResolve() in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn