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.
- Cómo utilizar writeStringArray () y readStringArray () en una parcela
- ¿Pueden las aplicaciones de Android usar jarras compuestas java 8?
- Acceso puntero nulo: los datos variables sólo pueden ser nulos en este lugar
- Selección de Android en el menú ListView
- Archivos de expansión Apk - Licencias de aplicaciones - Cuenta de desarrollador - respuesta NOT_LICENSED
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
- ¿Cómo detectar constantemente las ubicaciones de los marcadores cercanos desde la ubicación actual en Google Maps android?
- Ejecutar gradle -v devuelve "JAVA_HOME está establecido en un directorio no válido" aunque tenga un JAVA_HOME válido
- Uso de matrices en firebase
- Hacer que Eclipse se comporte como Visual Studio
- HttpURLConnection.getResponseCode () devuelve -1 en segunda invocación
- Aplicación de Android, El marcado en el documento que sigue al elemento raíz debe estar bien formado
- Android cómo cambiar el tamaño (escala) de un icono de vector xml mediante programación
- Corrección multihilo: Utilización de bloqueo sincronizado
¿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 ;
- Android TabLayout no muestra contenido tan pronto como el fragmento se cambia
- Actualización de la actividad TextView desde el servicio mediante vinculación de servicio