La Serialización es el mecanismo por el cual guardamos el estado de un objeto en un recurso no volátil como un fichero por ejemplo para luego poder volver a reconstruir este objeto, esto se denomina deserialización.
Cuando mencionamos el estado de un objeto nos referimos a las propiedades de este.
Si un objeto está referenciando a otro objeto este también debe ser serializable.
Si una de las propiedades del objeto no la queremos serializar entonces la definimos como transient.
Ejemplo de serialización:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class Main { public static void main(String[] args) { try{ FileReader input = new FileReader("prueba.txt"); try{ FileWriter output = new FileWriter("salida.txt"); try{ char[] buffer = new char[128]; // Caracteres leidos int numLeidos = 0; // Efectuamos la primera lectura numLeidos = input.read(buffer); while(numLeidos != -1){ output.write(buffer, 0, numLeidos); // Efectuamos la siguiente lectura numLeidos = input.read(buffer); } }finally{ // Forzar si hubiese algo pendiente de escribir output.flush(); // cerrar el fichero output.close(); } }catch(IOException ex){ ex.printStackTrace(); }finally{ input.close(); } } catch(IOException ex){ ex.printStackTrace(); } } } |
En este ejemplo creamos un objeto de tipo Date y lo serializamos en un fichero con nombre date.ser
Ejemplo de deserialización:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.ObjectInputStream; public class DeserializarObjeto { public static void main(String[] args) { FileInputStream fichero; try { fichero = new FileInputStream("serializacion.ser"); ObjectInputStream input = new ObjectInputStream(fichero); String objetoRecuperado = (String) input.readObject(); System.out.println(objetoRecuperado); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
En este otro ejemplo deserializamos el objeto creado y guardado en el ejemplo anterior. Para ello leemos el objeto y hacemos un casting a Date. Todos los objetos deserializados se devuelven como tipo Object, por eso es necesario el casting.