Si no se especifica un campo serialVersionUID
en sus clases Serializable
, el compilador de Java especificará uno para usted - en esencia se trata de un hash del nombre de la clase, los nombres de interfaces, métodos y campos de la clase. Sin embargo, los métodos se pueden modificar en cualquier momento, por lo que si necesita cambiar la forma en que se deserializa una clase almacenada, puede anular el método readObject. Sin embargo, si especifica el campo serialVersionUID
en su código, el compilador no anulará eso incluso si realiza cambios incompatibles, lo que puede dar como resultado una excepción en tiempo de ejecución: su IDE o compilador no le dará una advertencia. . (EDITAR - gracias EJP) Los IDEs como Eclipse pueden insertar el UID del compilador por usted, si desea comprobar fácilmente cómo ve el compilador ciertos cambios.
Si realiza cambios con frecuencia, mantenga una versión anterior del archivo de disco para probar la deserialización. Puede escribir pruebas unitarias para tratar de leer en el archivo anterior y ver si funciona o si es totalmente incompatible.
Una advertencia, personalmente he experimentado el dolor que está trabajando con las clases Serializable
originalmente pensadas para el almacenamiento a largo plazo que fueron diseñadas incorrectamente. Por ejemplo, almacenar elementos de la GUI en el disco en lugar de crearlos cuando sea necesario. Pregúntese si Serializable
es realmente la mejor manera de guardar sus datos.
Relacionados con https://stackoverflow.com/questions/3678136/managing-several-versions-of-serialized-java-objects/14946099#14946099 – Gray