Pregunta

Recientemente leí un comentario diciendo que el uso de SerialVersionUid para hacer diferentes versiones de la misma clase compatible para la serialización/deserialización ya no se necesita desde Java 5 en adelante. ¿Es esto correcto? Tal vez se mezcló con tipos de devolución covariantes. Así que quería verlo con todos ustedes.

¿Fue útil?

Solución

los Javadocs para Java 5 Todavía afirma que es necesario:

Si una clase serializable no declara explícitamente un VialverSionUid, entonces el tiempo de ejecución de la serialización calculará un valor de serie en serie predeterminado para esa clase basado en varios aspectos de la clase, como se describe en la especificación de serialización del objeto Java (TM). Sin embargo, se recomienda encarecidamente que todas las clases serializables declaren explícitamente los valores en serie VersionUid, ya que la computación en serie ValVersionUid predeterminada es altamente sensible a los detalles de la clase que pueden variar según las implementaciones del compilador y, por lo tanto, puede dar lugar a una inesperada InvalidClassexCeptions durante la deserialización. Por lo tanto, para garantizar un valor consistente en serie VersionUid en diferentes implementaciones de compiladores de Java, una clase serializable debe declarar un valor explícito en serie VersionUid. También se recomienda encarecidamente que las declaraciones explícitas en serie VersionUid utilizan el modificador privado cuando sea posible, ya que tales declaraciones se aplican solo a la clase inmediatamente declarada: los campos de versionUidsionUid no son útiles como miembros heredados.

Otros consejos

Desde Java 1.4 has podido usar Xmlencoder Para la serialización y esto ignora cualquier serie de serialsionUid, al igual que la mayoría de las otras bibliotecas de serialización.

Sin embargo, si usa ObjectOutputStream, su uso de SerialVersionUid no ha cambiado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top