La respuesta a esta pregunta es, quizás sorprendentemente, nunca , o de manera más realista, solo cuando se ve obligado a la interoperabilidad con el código heredado . Esta es la recomendación en Effective Java, 3rd Edition de Joshua Bloch:
No hay ninguna razón para usar la serialización Java en ningún sistema nuevo que escriba
El arquitecto jefe de Oracle, Mark Reinhold, dice que eliminar el actual mecanismo de serialización de Java es un objetivo a largo plazo.
Por qué la serialización de Java es defectuosa
Java proporciona como parte del lenguaje un esquema de serialización al que puede optar, utilizando la Serializable
interfaz. Sin embargo, este esquema tiene varias fallas intratables y los diseñadores del lenguaje Java deberían tratarlo como un experimento fallido.
- Fundamentalmente pretende que uno puede hablar sobre la forma serializada de un objeto. Pero hay infinitos esquemas de serialización, lo que resulta en infinitas formas serializadas. Al imponer un esquema, sin ninguna forma de cambiar el esquema, las aplicaciones no pueden usar el esquema más apropiado para ellos.
- Se implementa como un medio adicional para construir objetos, lo que evita cualquier verificación de precondición que realicen sus constructores o métodos de fábrica. A menos que se escriba un código de deserialización extra complicado, propenso a errores y difícil de probar, es probable que su código tenga una gran debilidad de seguridad.
- Probar la interoperabilidad de diferentes versiones del formulario serializado es muy difícil.
- El manejo de objetos inmutables es problemático.
Que hacer en su lugar
En su lugar, use un esquema de serialización que pueda controlar explícitamente. Tales como Protocol Buffers, JSON, XML o su propio esquema personalizado.