vuelva variable usar una tipos serializacion que puedo prevenir porque miembro guardar deserializar como clase java serializable

variable - ¿Por qué Java.lang.Object no implementa la interfaz Serializable?



serializacion c++ (4)

Todos los subtipos de una clase serializable son ellos mismos serializables.

En otras palabras: todas las clases que alguna vez creaste, fueron o serán creadas son todas serializables. transient solo excluye campos, no clases enteras.

Este es un potencial agujero de seguridad - por coincidencia puede serializar, por ejemplo, su DataSource con credenciales de base de datos dentro - si el creador de esta implementación de DataSource particular se olvidó de hacer esos campos transient . Es sorprendentemente fácil serializar un objeto aleatorio de Java, por ejemplo, a través de clases internas que contienen una referencia implícita a this externo.

Es más seguro usar la lista blanca de clases que explícitamente desea y permitir serializar en lugar de examinar cuidadosamente su código, asegurándose de que no se serialicen campos que no desea.

Además, ya no puede decir: MySuperSecretClass no es serializable (simplemente no implementa Serializable ); solo puede excluir las agallas (campos).

Posible duplicado:
¿Por qué Java necesita una interfaz Serializable?

De acuerdo con Serializability en documentos Java:

La clase que implementa la interfaz java.io.Serializable habilita la serialización de una clase. Las clases que no implementen esta interfaz no tendrán serialización ni deserialización en ninguno de sus estados. Todos los subtipos de una clase serializable son ellos mismos serializables. La interfaz de serialización no tiene métodos o campos y sirve solo para identificar la semántica de ser serializable

¿Por qué el Objeto ya no implementa Serializable ? Los miembros que no nos gustaría ser serializables se pueden hacer de forma transient . ¿Por qué prevenir la Serializabilidad por defecto?


Creo que tiene más sentido implementar Serializable para los objetos que necesitan persistir y declarar que todos los campos de la clase transiennt serán más engorrosos. Otro punto del que no estoy seguro es que Object sea ​​la raíz de todas las clases, lo que incluye clases relacionadas con la reflexión, por lo que será inapropiado implementar Serializable para la clase Object.


La mayoría de las clases no necesitan ser serializables. Con el diseño actual, puede observar fácilmente que la clase es serializable. Básicamente, es solo una auto-documentación comprobada por el compilador. De lo contrario, probablemente escribirías algo como:

/** DON''T SERIALIZE IT!!! */ class Connection { ... }

y es mejor tener un idioma o función de biblioteca que comentarios.


1. Serializable es la interfaz del marcador , que está vacía, pero cuando una clase está marcada Serializable significa que sus objetos son Serializables.

2. La razón por la que java.lang.Object no implementó Serializable es porque, ¿qué pasa si NO quieres que ciertos campos sean Serializables y que mi error se haya perdido para agregar transitorios a ese campo, entonces será un caos.

3. Al hacer que el programador implemente Serializable para su clase, el programador toma conciencia de que lo ha implementado conscientemente y debe tomar las medidas necesarias para evitar que se serialice algo que no debería ser.