2012-03-26 12 views

Antwort

0

Von der Javadoc:

Die Serialisierung Runtime ordnet jede serializable Klasse einer Versionsnummer, eine so genannte serialVersionUID, die während Deserialisierung verwendet wird, um zu überprüfen, dass der Sender und Empfänger eines serialisierten bezweckte geladene Klassen für dieses Objekt, die mit in Bezug auf Serialisierung kompatibel sind. Wenn der Empfänger eine Klasse für das Objekt geladen hat, das eine andere serialVersionUID als die der entsprechenden Klasse des Absenders hat, führt die Deserialisierung zu einer InvalidClassException. Eine serializable Klasse kann seine eigenen serialVersionUID erklärt ausdrücklich durch ein Feld "serialVersionUID" genannt erklärt, das statisch sein muß, endgültig und vom Typ long:

ANY-ACCESS-Modifier static final lange serialVersionUID = 42L;

Wenn eine serializable Klasse nicht explizit eine serialVersionUID nicht erklären, dann wird die Serialisierung Laufzeit einen Standard serialVersionUID Wert für diese Klasse auf der Grundlage verschiedenen Aspekte der Klasse, wie beschrieben in der Java (TM) Objektserialisierung berechnet Spezifikation. Es wird jedoch dringend empfohlen, dass alle serializable Klassen explizit serialVersionUID Werte erklären, da der Standard serialVersionUID Berechnung Klasse Details sehr empfindlich ist, die auf Compiler-Implementierungen variieren abhängig und kann somit in unerwarteten InvalidClassExceptions während Deserialisierung führen. Um einen konsistenten Wert für serialVersionUID über verschiedene Java-Compiler-Implementierungen zu garantieren, muss daher eine serialisierbare Klasse einen expliziten serialVersionUID-Wert deklarieren. Es ist auch stark empfohlen, dass explizite serialVersionUID-Deklarationen den privaten Modifizierer, wo möglich, verwenden, da solche Deklarationen gelten nur für die sofort deklarierende Klasse - serialVersionUID Felder sind nicht nützlich als geerbte Mitglieder.