Introducción
Nuestras computadoras y dispositivos móviles utilizan información "persistente" para almacenar datos a largo plazo, ésta información persistente se conoce como archivos y está disponible incluso después que se termina la ejecución del programa. Los archivos se almacenan por lo general en dispositivos de almacenamiento no volátiles secundarios como los discos duros o los SSD.Archivos y Flujos
Java "ve" cada archivo como un flujo secuencial de bytes, cada sistema operativo provee un mecanismo para saber cual es el final de un archivo, éste puede ser un marcador de final de archivo o un conteo total de bytes en el mismo.Los flujos binarios representan datos en formato binario, y los flujos de caracteres manejan datos como secuencia de caracteres.
Serialización de objetos
Java provee éste mecanismo que permite objetos ser escritos o leidos desde un flujo.Un objeto serializado esta representado por como una secuencia de bytes que incluye la informacion.del objeto, como su tipo y el tipo de datos que almacena. Después que un objeto serializado se escribió en un archivo, puede ser leido y deserializado para recrear el objeto nuevamente.Para qué sirven las clases ObjectInputStream y ObjectOutputStream?
Posibilitan que objetos se lean o escriban por completos desde un flujo o un archivo.Solo las clases que implementan la interfaz Serializable pueden ser serializadas o deserializadas.La interfaz ObjectOutput contiene el metodo writeObject, que toma un objeto como argumento y escribe su información en OutputStream, Una clase que que implementa ésta interfaz como ObjectOutputStream, asegura que el objeto es Serializable.
La interfaz ObjectInput contiene el método readObject que lee y retorna una referencia a un objeto desde InputStream.Despues de la lectura, la referencia se puede hacer cast con el tipo real del objeto.
Se expone un ejemplo a continuación:
En este ejemplo, tenemos una clase Paciente, que nos permite crear (valga la redundancia) Objetos del tipo Paciente. Este tipo de datos posee atributos para almacenar información de documento de identificación, nombre y apellido, y finalmente su género. La clase provee constructores, getters y setters adecuados.
Aquí se crean ArrayLists, para organizar los datos, los pacientes y sus datos, se almacenan aquí.
Como se explicó previamente, para almacenar estos datos, hacen falta serializarlos, y luego enviarlos como un flujo para ser escritos en el archivo empleamos entonces las sentencias FileInputStream. ObjectInputStream, FileOutputStream, ObjectOutputStream.
El procedimiento basico a seguir es declarar un objeto de tipo FileOutputStream usando como parametro de entrada la ruta del archivo. Despues de eso Convertimos a un flujo Usando:
ObjectOutputStream resultado=new ObjectOutputStream(fileOut);
y escribimos en el archivo con:resultado.writeObject(listaPacientes);
El proceso de lectura es analogo al de escritura.