Java.io.invalidClassException während der Serialisierung / Deserialisierung

Ich habe einen Gegenstand, den ich lese und schreibe an und von fileinputstreams/objectinputstreams und objectinputstreams/objectoutputstreams . Ich bekomme immer Fehler, dass Java eine serialversionUID , aber eine andere gefunden hat.

In meiner Klasse habe ich serializable implementiert und habe ein Feld wie static final long serialVersionUID = 1L; Was ich dachte, war genug.

Ich bin neu in der Java-Serialisierung. Was fehlt mir hier

BEARBEITEN Wenn es darauf ankommt, versuche ich eigentlich zu schreiben und zu lesen **ArrayList<MyObject>**

Hier ist die volle Spur:

 java.io.InvalidClassException: com.luxurymode.pojos.Reminder; Incompatible class (SUID): com.luxurymode.pojos.Reminder: static final long serialVersionUID =4209360273818925922L; but expected com.luxurymode.pojos.Reminder: static final long serialVersionUID =1L; W/System.err( 4504): at java.io.ObjectInputStream.verifyAndInit(ObjectInputStream.java:2723) W/System.err( 4504): at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1848) W/System.err( 4504): at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:826) W/System.err( 4504): at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2066) W/System.err( 4504): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:929) W/System.err( 4504): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2285) W/System.err( 4504): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2240) W/System.err( 4504): at java.util.ArrayList.readObject(ArrayList.java:662) W/System.err( 4504): at java.lang.reflect.Method.invokeNative(Native Method) W/System.err( 4504): at java.lang.reflect.Method.invoke(Method.java:521) W/System.err( 4504): at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1537) W/System.err( 4504): at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1460) W/System.err( 4504): at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:2139) W/System.err( 4504): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:929) W/System.err( 4504): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2285) W/System.err( 4504): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2240) W/System.err( 4504): at com.luxurymode.singletons.RemindersSingleton.<init>(RemindersSingleton.java:54) W/System.err( 4504): at com.luxurymode.singletons.RemindersSingleton.getInstance(RemindersSingleton.java:66) W/System.err( 4504): at com.luxurymode.views.AddReminderView.saveAlarm(AddReminderView.java:290) W/System.err( 4504): at com.luxurymode.tab_2.RemindersActivity.onClick(RemindersActivity.java:94) W/System.err( 4504): at android.view.View.performClick(View.java:2554) W/System.err( 4504): at android.view.View$PerformClick.run(View.java:8962) W/System.err( 4504): at android.os.Handler.handleCallback(Handler.java:587) W/System.err( 4504): at android.os.Handler.dispatchMessage(Handler.java:92) W/System.err( 4504): at android.os.Looper.loop(Looper.java:123) W/System.err( 4504): at android.app.ActivityThread.main(ActivityThread.java:4627) W/System.err( 4504): at java.lang.reflect.Method.invokeNative(Native Method) W/System.err( 4504): at java.lang.reflect.Method.invoke(Method.java:521) W/System.err( 4504): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) W/System.err( 4504): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) W/System.err( 4504): at dalvik.system.NativeStart.main(Native Method) D/AndroidRuntime( 4504): Shutting down VM 

  • Warum bekomme ich "muss eine Overclass-Methode überschreiben" mit @Override?
  • Proguard-Alternative zur Verschleierung von Android-Apps mit vorkompilierten Drittbibliotheken
  • Android - Erhalten Sie den sichtbaren Bereich einer Ansicht?
  • CoordinatorLayout mit RecyclerView & CollapsingToolbarLayout
  • Warten Sie auf einen Thread, bevor Sie auf Android fortfahren
  • Wie verwende ich AsYouTypeFormatter TextWatcher in Android App?
  • Text zu Rede App UI ist langsam Android
  • Python-Pakete auf Android installieren
  • 3 Solutions collect form web for “Java.io.invalidClassException während der Serialisierung / Deserialisierung”

    Sie lesen aus einer Datei? In diesem Fall spielt es keine Rolle, ob Sie die serialVersionUID jetzt hinzugefügt haben, es unterscheidet sich von der in der Datei gespeicherten, und das schafft die Ausnahme.

    Eine schnelle Lösung könnte sein, serialVersionUID auf 4209360273818925922L zu setzen, das scheint die serialVersionUID zu sein, die automatisch von Java erzeugt wurde, als du dieses Objekt in dieser Datei zu diesem Zeitpunkt gespeichert hast 🙂

    Wie in der Dokumentation angegeben, kann dies aus drei verschiedenen Gründen geschehen:

    • Die serielle Version der Klasse stimmt nicht mit der des aus dem Stream gelesenen Klassen-Deskriptors überein
    • Die Klasse enthält unbekannte Datentypen
    • Die Klasse hat keinen zugänglichen no-arg-Konstruktor

    Also, vor allem, ob beide Implementierungen die gleiche serialVersionUID . Wenn dies wahr ist, müssen Sie sicher sein, dass die Klasse keinen Typ verwendet, der undefiniert (oder unbekannt) der JVM ist, die Sie versuchen, zu deserialisieren. Schließlich müssen Sie einen Standardkonstruktor ClassName() zur Verfügung stellen, der die Initialisierung ClassName() .

    Das können die Probleme sein und sicherlich ist es einer von diesen, also denke ich nicht, dass du nach etwas Ungewöhnliches schauen möchtest. Aus meiner persönlichen Erfahrung kann ich auch hinzufügen, dass mit verschiedenen JVM-Versionen zu serialisieren und deserialisieren kann dieses Problem zu schaffen, so sicher sein, dass es auch.

    Sie sehen die erste Zeile?
    Sie haben differenct serialVersionUIDs, die nicht nicht miteinander kompatibel sind, müssen Sie die gleiche serialVersionUID verwenden!

    Java.io.InvalidClassException:

    Com.luxurymode.pojos.Reminder; Inkompatible Klasse (SUID): com.luxurymode.pojos.Reminder: statische letzte lange serialVersionUID = 4209360273818925922L ; Aber erwartete com.luxurymode.pojos.Reminder: statische letzte lange serialVersionUID = 1L ;

    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.