tipos serializar serialización serializacion que deserializacion como clase java serialization

java - serializar - serialversionuid que es



¿Importa lo que elijo para serialVersionUID al extender clases Serializable en Java? (2)

Extiendo una clase (ArrayBlockingQueue) que implementa la interfaz Serializable . La documentación de Sun (y mi IDE) me aconseja que debo establecer este valor para evitar daños:

Sin embargo, se recomienda encarecidamente que todas las clases serializables declaren explícitamente los valores de serialVersionUID, ya que el cómputo serialVersionUID predeterminado es muy sensible a los detalles de clase que pueden variar dependiendo de las implementaciones del compilador, y puede dar como resultado inesperadas InvalidClassExceptions durante la deserialización.

Ahora, no me importa qué valor poner allí. ¿Importa?


Lo único que importa para serialVersionUID es que las versiones serializadas compatibles con binarios de la clase tienen el mismo serialVersionUID; es decir, si no ha realizado ningún cambio radical en la forma serializada de la clase, todo estará bien.

Por supuesto, una mejor opción es usar las opciones avanzadas que la serialización pone a su disposición para que nunca haya ningún cambio importante. Sugeriría leer sobre readResolve () et al. Efectivo Java cubre algunos de los problemas más espinosos en esta área en detalle.


No, siempre que lo cambie en el momento correcto (es decir, cuando realice un cambio que afecte la serialización, por ejemplo, eliminar un campo), no debería importar qué valor use.

Para simplificar, te sugiero comenzar con 0 y aumentarlo en 1 cada vez que lo necesites.

La especificación de serialización tiene más detalles.