2009-04-01 22 views

Respuesta

13

Si aún no ha modificado el código, probablemente pueda ejecutar la herramienta serialver (parte del JDK) y ver lo que genera. Creo que obtendrá lo que es seriVersionUID calculado.

Here is a brief article on serialver.

+2

¡Asegúrese de hacer esto con la misma JVM exacta que usó para compilar originalmente el código! – Eddie

+1

Esto también debería funcionar en una JVM diferente, porque de lo contrario los archivos de clase y los objetos serializados no serían portátiles en las JVM (que sí lo son). – Thilo

+4

La especificación de Serialización de objetos Java, sección 4.6, explica cómo serialVersionUID puede no ser compatible con las JVM en el caso de las clases internas, debido a las implementaciones que generan diferentes nombres para los miembros sintéticos. He visto esto suceder en la práctica, incluso con dos JVM de Sun. – Martin

3

Si está utilizando Eclipse, que tiene una "solución rápida" para generar el serialVersionUID calculado. Esto, por supuesto, solo funciona si tiene la fuente (exacta) para las clases en el momento en que los objetos han sido serializados.

Si tiene al menos los archivos de clase para ellos, use la herramienta de línea de comandos "serialver" (viene con JDK).

6

Lo que suelo hacer es compilar el código, intentar ejecutarlo, y la excepción planteada menciona el SVUID ofensor, por lo que puedo cortarlo y pegarlo en mi propio código. Crudo, pero funciona.

Cuestiones relacionadas