Serialización en java
La serialización de objetos es el proceso por el cual el estado actual de un objeto puede ser guardado en forma persistente, también se puede recuperar el objeto con su estado de la misma en la que se guardó.
El proceso de almacenar el objeto se llama Serialización de objetos, mientras que el proceso de leer el objeto y recuperar el valor que había sido almacenado se llama deserialización de objetos.
Aunque esto es un proceso simple tiene muchos usos, la serialización de objetos se utiliza para pasar objetos a través de flujos, en RMI y en persistencia ligera.
En la serialización de objetos esta guarda los siguientes detalles acerca de un objeto que está siendo serializado:
Persistencia de Objetos
Persistencia involucra el almacenaje de un objeto, vamos asumir que necesitamos que los datos contenidos en un objeto sean persistente, una forma de almacenar un objeto es almacenando en un archivo, con delimitadores (separadores), pero esto requiere muchas manipulaciones de cadenas de caracteres y del archivo como tal.
La otra forma seria lograr la persistencia a través de la serialización de objetos, estos objetos se pueden guardar en forma persistente durante una ejecución del programa y recuperarlos durante otra ejecución que sería la deserialización.
Implementando serialización en Java
La lectura y escritura de los objetos en java se lleva a cabo con la ayuda de 2 flujos presentes en el paquete java.io estos son:
Estas 2 clases son similares a los flujos de entrada y salida de java.
Interfaz Serializable
Si Ud. quiere que una clase se pueda serializar, pues dicha clase debe implementar la interfaz Serializable, esta es una interfaz vacía, una interfaz vacía es aquella que no contiene métodos, esta se usa solo para identificar la semántica de la serialización, serializable es una interfaz marcadora y marca que la clase tiene propiedad de la serialización.
La Interfaz Externalizable
Si se quiere tener un mayor control y soluciones de serialización personalizadas, se debe acudir a la externalización, es decir, implementar la interfaz Externalizable, en vez de la interfaz Serializable.
Esta interfaz se aplica cuando una clase necesita coordinarse explícitamente con su súper clase para serializarse a sí misma, implementando la interfaz Externalizable da un control completo y explícito del proceso.
la diferencia en ambas, es que con la interfaz Serializable, la clase ObjectOutputStream automáticamente guarda solo la identidad de la clase que la implementa, en cambio la interfaz Externalizable es responsable de serializar y deserializar su estado y lo hace en coordinación con su superclase, en la interfaz Externalizable los métodos writeExternal y readExternal se implementan por el usuario para coordinar explícitamente con la superclase y guardar el estado del objeto.
Si Ud. no quiera que ocurra la serialización innecesaria de objetos son las siguientes:
Marcar los campos como private o transient previene que sean serializados.
Los métodos getter y setter de los campos que no deben ser serializados deben lanzar notSerializableException para que el proceso de serialización termine.
La clase OjectOutputStream
Esta se usa para escribir tipos de datos que están contenidos en objetos de java a una clase OutputStream, escribe la representación en la memoria de los objetos a la clase OutputStream. Los objetos java escritos usando ObjectOutputStream pueden leerse usando ObjectInputStream.
La clase ObjectInputStream
Esta permite la deserialización de datos primitivos u objetos escrito por el ObjectOutputStream, estos 2 flujos cuando se usan con FileInputStream y FileOutpuStream proporcionan almacenamiento persistente de objetos.
Durante la deserialización, se crea nuevos objetos, por lo tanto los viejos no son sobrescrito. La memoria es asignada a los objetos nuevos y es inicializada en null.
Los campos individuales que son leídos de la clase ObjectInputStream son asignados a los campos apropiados en el nuevo objeto. En el tal caso si alguna excepción ocurre durante la deserialización, la clase ObjectInputStream la capturara y el proceso de lectura terminara.
Ahora vamos al código con todo lo aprendido, en este caso vamos a crear una clase con campos que introduciremos por teclado, crearemos un objeto para luego Serializar, hacia un archivo que llamaremos SerializadoUsuarioSteemit.txt, después realizaremos la deserialización de dicho archivo a un nuevo objeto, veamos a continuación el código:
Gracias a todos por leer…
Wow greate article!
You just got a 26.16% upvote from @postdoctor!
Thanks for using the @postdoctor service!
Congratulations! This post has been upvoted from the communal account, @minnowsupport, by neliobatis from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, theprophet0, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.
If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.