Java.io.invalidClassException durante la serialización / deserialización

Tengo un objeto que estoy leyendo y escribiendo desde y hacia fileinputstreams/objectinputstreams y objectinputstreams/objectoutputstreams . Sigo recibiendo errores que java excpected un serialversionUID , pero encontró otro.

En mi clase he implementado serializable y tienen un campo como static final long serialVersionUID = 1L; Que pensé que era suficiente.

Soy nuevo en la serialización de java. ¿Que me estoy perdiendo aqui?

EDIT Si es importante, en realidad estoy tratando de escribir y leer un **ArrayList<MyObject>**

Aquí está el rastro completo:

 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 

¿Estás leyendo de un archivo? En ese caso, no importa si ha agregado el serialVersionUID ahora, es diferente del que se almacena en el archivo y crea la excepción.

Una solución rápida podría ser establecer serialVersionUID a 4209360273818925922L, que parece ser el serialVersionUID que fue generado automáticamente por java cuando guardó los objetos en ese archivo en ese momento 🙂

Como se indica en la documentación esto puede suceder por tres razones diferentes:

  • La versión de serie de la clase no coincide con la del descriptor de clase leído de la secuencia
  • La clase contiene tipos de datos desconocidos
  • La clase no tiene un constructor no-arg accesible

Por lo tanto, en primer lugar comprobar que ambas implementaciones tienen el mismo serialVersionUID . Si esto es cierto, debe asegurarse de que la clase no utilice ningún tipo indefinido (o desconocido) para la JVM en la que está intentando deserializar. Por último, es necesario proporcionar un constructor estándar ClassName() que hace la inicialización vacía.

Estos pueden ser los problemas y seguramente es uno de estos, así que no creo que usted debe mirar hacia adelante algo extraño. Desde mi experiencia personal puedo agregar también que el uso de diferentes versiones de JVM para serializar y deserializar puede crear este problema, así que asegúrese de que también.

¿Ves la primera línea?
Usted tiene differenct serialVersionUIDs, theay no son compatibles entre sí, usted tiene que usar el mismo serialVersionUID!

Java.io.InvalidClassException:

Com.luxurymode.pojos.Reminder; Clase incompatible (SUID): com.luxurymode.pojos.Reminder: static final long serialVersionUID = 4209360273818925922L ; Pero esperaba com.luxurymode.pojos.Reminder: static final long serialVersionUID = 1L ;

  • ArrayList no se inicializa con tamaño predefinido
  • Equivalente a javax.swing.Timer en Android
  • Implementar getMaxAmplitude para audioRecord
  • Android integrando PGP en un proyecto
  • ¿Cómo puedo restar estas listas más rápido?
  • Administrar advertencias "obsoletas" en el proyecto de Android con minSdkVersion
  • Android.view.inflateexception binario archivo xml línea # 1 error inflar clase android.widget.relativeLayout
  • Volumen de audio de Android webRTC
  • Los objetos personalizados pasan por valor o pasan por referencia en fragmentos y actividades.
  • ¿Dos aplicaciones de Android en el mismo proyecto de Eclipse?
  • android.view.InflateException: Línea de archivo XML binario # 4: Error al inflacionar la clase SwitchPreference
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.