¿Qué significa exactamente que una clase esté Serializable
en Java? O en general, para el caso ...
java
serializable
Ritwik Bose
fuente
fuente
Serializable
:Serializability of a class is enabled by the class implementing the java.io.Serializable interface. Classes that do not implement this interface will not have any of their state serialized or deserialized. All subtypes of a serializable class are themselves serializable. The serialization interface has no methods or fields and serves only to identify the semantics of being serializable.
Respuestas:
La serialización es la persistencia de un objeto de la memoria a una secuencia de bits, por ejemplo, para guardarlo en el disco. La deserialización es todo lo contrario: leer datos del disco para hidratar / crear un objeto.
En el contexto de su pregunta, es una interfaz que, si se implementa en una clase, esta clase puede ser serializada y deserializada automáticamente por diferentes serializadores.
fuente
Aunque la mayoría de los usuarios ya han dado la respuesta, pero me gustaría agregar un ejemplo para aquellos que lo necesitan para explicar la idea:
Digamos que tienes una persona de clase como la siguiente:
y luego creas un objeto como este:
Puede serializar ese objeto a muchas secuencias. Haré eso en dos transmisiones:
Serialización a salida estándar:
Serialización a un archivo:
Luego:
Deserializar desde archivo:
fuente
Significa que las instancias de la clase pueden convertirse en una secuencia de bytes (por ejemplo, para guardarse en un archivo) y luego volver a convertirse en clases nuevamente. Esta recarga podría ocurrir en una instancia diferente del programa, o incluso en una máquina diferente. Sin embargo, la serialización (en cualquier idioma) involucra todo tipo de problemas, especialmente cuando tiene referencias a otros objetos dentro del serializable.
fuente
Aquí hay una explicación detallada de la serialización : (mi propio blog)
Publicación por entregas:
La serialización es el proceso de serialización del estado de un objeto que se representa y almacena en forma de una secuencia de bytes. Esto se puede almacenar en un archivo. El proceso para leer el estado del objeto del archivo y restaurarlo se llama deserialización.
¿Cuál es la necesidad de la serialización?
En la arquitectura moderna, siempre es necesario almacenar el estado del objeto y luego recuperarlo. Por ejemplo, en Hibernate, para almacenar un objeto debemos hacer que la clase Serializable. Lo que hace es que una vez que el estado del objeto se guarda en forma de bytes, se puede transferir a otro sistema que luego puede leer desde el estado y recuperar la clase. El estado del objeto puede provenir de una base de datos o una jvm diferente o de un componente separado. Con la ayuda de la serialización podemos recuperar el estado del objeto.
Código de ejemplo y explicación:
Primero echemos un vistazo a la clase de artículo:
En el código anterior se puede ver que la clase Item implementa Serializable .
Esta es la interfaz que permite que una clase sea serializable.
Ahora podemos ver que una variable llamada serialVersionUID se inicializa en Variable larga. El compilador calcula este número basándose en el estado de la clase y los atributos de la clase. Este es el número que ayudará a la jvm a identificar el estado de un objeto cuando lee el estado del objeto del archivo.
Para eso podemos echar un vistazo a la documentación oficial de Oracle:
Si ha notado que hay otra palabra clave que hemos usado que es transitoria .
Si un campo no es serializable, debe marcarse como transitorio. Aquí marcamos el itemCostPrice como transitorio y no queremos que se escriba en un archivo
Ahora echemos un vistazo a cómo escribir el estado de un objeto en el archivo y luego leerlo desde allí.
En lo anterior podemos ver un ejemplo de serialización y deserialización de un objeto.
Para eso usamos dos clases. Para serializar el objeto, hemos utilizado ObjectOutputStream. Hemos utilizado el método writeObject para escribir el objeto en el archivo.
Para la deserialización, hemos utilizado ObjectInputStream que lee del objeto del archivo. Utiliza readObject para leer los datos del objeto del archivo.
El resultado del código anterior sería como:
Tenga en cuenta que itemCostPrice del objeto deserializado es nulo ya que no se escribió.
fuente
La serialización implica guardar el estado actual de un objeto en una secuencia y restaurar un objeto equivalente de esa secuencia. La secuencia funciona como un contenedor para el objeto
fuente
Serializable se llama como una interfaz, pero es más como un indicador del subsistema de serialización, en tiempo de ejecución. Dice que este objeto se puede guardar. Se guardarán todas las variables de instancia de Objetos con la excepción de los objetos no serializables y los que marcan volátiles.
Imagine que su aplicación puede cambiar el color como una opción, sin mantener esa configuración externa, necesitaría cambiar el color cada vez que la ejecuta.
fuente
La serialización es una técnica para almacenar o escribir objetos y datos en archivos. Mediante el uso de
ObjectOutputStream
yFileOutputStream
clases. Estas clases tienen sus métodos específicos para persistir los objetos. me gustawriteObject();
para una clara explicación con figuras. Vea aqui para mas informacion
fuente
Presentar desde otra perspectiva. La serialización es un tipo de interfaz llamada 'interfaz de marcador'. Una interfaz de marcador es una interfaz que no contiene declaraciones de métodos, sino que simplemente designa (o "marca") una clase que implementa la interfaz como que tiene alguna propiedad. Si entiendes el polimorfismo, esto tendrá mucho sentido. En el caso de la interfaz de marcador serializable, el método ObjectOutputStream.write (Object) fallará si su argumento no implementa la interfaz. Este es un error potencial en Java, podría haber sido ObjectOutputStream.write (Serializable)
Muy recomendable: Lectura del ítem 37 de Effective Java por Joshua Bloch para aprender más
fuente
Serialización: escritura del estado del objeto en un archivo / red o en cualquier lugar. (Formulario compatible con objeto Java medio para presentar el formulario compatible o el formulario compatible con la red)
Deserialización: Lectura del estado del objeto desde un archivo / red o en cualquier lugar. (Archivo medio / formulario compatible con red para formulario compatible con objetos Java)
fuente
Solo para agregar a las otras respuestas y con respecto a la generalidad. La serialización a veces se conoce como archivado, por ejemplo en Objective-C.
fuente