Lectura y escritura de objetos

Se puede utilizar la capacidad de Java para dar soporte a la serialización de objetos para poder leer y escribir objetos completos sin preocuparse de cómo están implementados por dentro. Para que una clase sea serializable debe de implementar la interfaz Serializable. Todas las clases de la API estándar de Java son serializables.

Para escribir objetos de una clase, que implementa la interfaz Serializable, se utiliza el flujo ObjectOutputStream. En la serialización del objeto se escriben en el flujo todos los atributos que no sean static ni transient. Si al escribir los atributos de un objeto, alguno de ellos es un objeto, se serializa a su vez dicho objeto, serializando todos sus atributos. De esta forma, cuando se lee el objeto se podrá reconstruir tal y como estaba en la parte que no es static ni transient. Para escribir un objeto se utiliza el método writeObject().

Para leer un objeto escrito mediante serialización se utiliza el flujo ObjectInputStream. Una vez creado un objeto de este flujo, se puede llamar al método readObject() para leer un objeto del flujo. Este método devuelve un Object, por lo que habrá que realizar una conversión de clase de la forma apropiada.

Como todo se entiende mejor con ejemplos, en el siguiente ejemplo podéis ver el uso de serialización de objetos tanto para escribirlos como para leerlos. He utilizado para ello un objeto String y un objeto de la clase Date, implementando ambos la interfaz Serializable.

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Date;

public class PruebaSerializable {

    public static void main(String[] args) throws ClassNotFoundException {

        try {
            FileOutputStream archivo = new FileOutputStream(“prueba.txt”);
            ObjectOutputStream salida = new ObjectOutputStream(archivo);
            salida.writeObject(“Hoy es: “);
            salida.writeObject(new Date());
            salida.close();
        } catch (IOException e) {
            System.out.println(“Problemas con el archivo”);
        }
        try {
            FileInputStream archivo_dos = new FileInputStream(“prueba.txt”);
            ObjectInputStream entrada = new ObjectInputStream(archivo_dos);
            String hoy = (String) entrada.readObject();
            Date fecha = (Date) entrada.readObject();
            entrada.close();
            System.out.println(hoy + ” ” + fecha);
        } catch (FileNotFoundException ef) {
            System.out.println(“No se pudo abrir el archivo”);
        } catch (IOException ex) {
            System.out.println(“Problemas con el archivo”);
        }
    }

}

Bueno, con esta entrada me despido de todos ustedes hasta setiembre. Necesito tiempo para preparar y explicar la materia y ejercicios. Si necesitáis ayuda, me podéis prreguntar (dos o tres veces a la semana echaré una ojeada al correo).

Muchas gracias por su tiempo

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s