Saltar al contenido

¿Por qué Java necesita una interfaz serializable?

Ya no necesitas indagar más en internet porque llegaste al sitio necesario, contamos con la solución que buscas sin problemas.

Solución:

La serialización está plagada de trampas. El soporte de serialización automática de este formulario hace que las clases internas formen parte de la API pública (razón por la cual javadoc le brinda las formas persistentes de clases).

Para la persistencia a largo plazo, la clase debe poder decodificar este formulario, lo que restringe los cambios que puede realizar en el diseño de la clase. Esto rompe la encapsulación.

La serialización también puede provocar problemas de seguridad. Al poder serializar cualquier objeto al que tenga una referencia, una clase puede acceder a datos que normalmente no podría (analizando los datos de bytes resultantes).

Hay otros problemas, como que la forma serializada de las clases internas no está bien definida.

Hacer que todas las clases sean serializables exacerbaría estos problemas. Echa un vistazo a Effective Java Second Edition, en particular Ítem ​​74: Implementar Serializable con criterio.

Creo que tanto la gente de Java como la de .Net se equivocaron esta vez, hubiera sido mejor hacer que todo se serializara de forma predeterminada y solo necesitara marcar aquellas clases que no se pueden serializar de manera segura.

Por ejemplo, en Smalltalk (un lenguaje creado en los 70) cada objeto es serializable por defecto. No tengo idea de por qué este no es el caso en Java, considerando el hecho de que la gran mayoría de los objetos son seguros para serializar y solo algunos de ellos no lo son.

Marcar un objeto como serializable (con una interfaz) no hace mágicamente que ese objeto sea serializable, fue serializable todo el tiempo, es solo que ahora expresó algo que el sistema podría haber encontrado por sí mismo, por lo que no veo ninguna buena razón para que la serialización sea como es ahora.

Creo que fue una mala decisión tomada por los diseñadores o la serialización fue una ocurrencia tardía, o la plataforma nunca estuvo lista para realizar la serialización por defecto en todos los objetos de manera segura y consistente.

No todo es genuinamente serializable. Tome una conexión de red, por ejemplo. Puede serializar los datos / estado de su objeto de socket, pero se perdería la esencia de una conexión activa.

Comentarios y puntuaciones del post

Tienes la opción de añadir valor a nuestro contenido informacional cooperando tu veteranía en las anotaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *