2012-03-23 9 views
0

Meine serialisierbare Klasse wird nicht mit objectinputstream nach dem Hinzufügen von statischen Methoden zur Klasse eingelesen, ist das erwartete Verhalten? Wo im javadoc heißt es hinzufügen statische Methoden zu einer serialisierbaren Klasse schafft Inkompatibilität?Ändern einer serialisierbaren Klasse durch Hinzufügen von statischen Methoden, Java

+0

Es ist unmöglich, Ihr Problem ohne weitere Informationen zu diagnostizieren. Bitte posten Sie etwas Code und beschreiben Sie das Problem ein wenig mehr. –

+0

Ausnahme im Thread "main" java.io.InvalidClassException: lokale Klasse inkompatibel: stream classdesc serialVersionUID = 2421933566308851961, lokale Klasse serialVersionUID = 6969314805631849195, alles, was ich tat, war statische Methoden hinzuzufügen, Hinzufügen der alten serialversion uid behoben das Problem –

+0

Danke. Das bedeutet natürlich, dass Jon Skeet Ihr Problem gelöst hat, was niemals eine Überraschung ist. –

Antwort

4

In der Serialisierung Specification Java-Objekts, Abschnitt 4.6:

Die Stream-eindeutige Kennung ist ein 64-Bit-Hash-Wert von dem Klassennamen, Schnittstellenklassennamen, Methoden und Feldern.

...

Für jede nicht-private durch Methodennamen sortiert Methode und Unterschrift:

  • Der Name der Methode.
  • Die Modifizierer der Methode wurden als 32-Bit-Ganzzahl geschrieben.
  • Der Deskriptor der Methode.

Nein, ich kann nicht arbeiten, wie es tatsächlich Kompatibilität von serialisierten Zustand entweder brechen könnte, aber das ist, warum es entweder wert die Standard-Java binäre Serialisierung zu vermeiden (zB für Protocol Buffers) oder immer eine serialVersionUid selbst deklarieren.

Verwandte Themen