Java Serializable: ¿Importancia de serialVersionUID? [duplicar]

Posible duplicado:
¿Por qué debería preocuparme por serialVersionUID?

Estoy usando una clase que implementó Serializable. Eclipse me da una advertencia de "No Serial UID", pero la escritura y la lectura de la clase funcionan bien. Me preguntaba cuál es el propósito de que una clase Serializable tenga un UID. ¿Es solo una buena práctica o mi clase no funcionará sin ella eventualmente? ¿Puede ser cualquier número?

preguntado el 22 de mayo de 12 a las 19:05

por favor lee stackoverflow.com/questions/285793/… -

1 Respuestas

Es importante cuando serializa y deserializa la misma clase usando diferentes máquinas virtuales o en diferentes máquinas. El UID se usa para verificar si la clase que está tratando de deserializar es realmente la que cree que es, por lo que si su clase en su código tiene un UID y la clase que se serializó tiene uno diferente, el de -la serialización fallará.

Una clase sin un UID recibirá uno automáticamente de la JVM, pero no hay garantía de que diferentes JVM le den el mismo UID a la misma clase.

Lea el javadoc de la interfaz serializable para obtener más detalles.

¿Puede ser cualquier número?

Idealmente, debería ser un número único para esa versión particular de su clase (como un hash), si realiza cambios en su clase que afectan los campos serializados (notransient), el UID debe cambiar. Creo que Eclipse puede generar un UID automáticamente para ti.

contestado el 22 de mayo de 12 a las 20:05

Estoy de acuerdo con la mayor parte de esto. En cuanto a la unicidad, no es necesario que sea único entre las clases, solo necesita cambiarse si la clase cambia de manera incompatible. La razón por la que la versión predeterminada creada por jvm es un hash es que es sensible a los cambios de nivel de clase. - jtahlborn

@jtahlborn ¿Habría algún problema si tuviera dos clases diferentes con el mismo UID y tratara de deserializar una como la otra? - veracidad

no puede hacer eso con la serialización estándar de Java, ya que el nombre de la clase es parte de los datos en serie. - jtahlborn

@jtahlborn editado a la singularidad entre versiones. - veracidad

Si realiza cambios también en los campos no transitorios que son incompatibles con la serialización en los términos de la sección de control de versiones de objetos de la especificación de serialización de objetos necesita cambiar/implementar los métodos readObject/writeObject/readResolve/writeReplace, el miembro serialFields o como último recurso el valor serialVersionUID como un tope. Es un último recurso, y la medida en que la serialización admite el control de versiones de clases se subestima en gran medida. - user207421

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.