Serialización y Deserialización de Objetos en Java con ObjectOutputStream y ObjectInputStream

Informática4,19 KB

Serialización y Deserialización de Objetos en Java

El siguiente código implementa el almacenamiento persistente y la recuperación secuencial de objetos en Java mediante los flujos ObjectOutputStream y ObjectInputStream, haciendo uso de la interfaz java.io.Serializable.

Estructura del Programa: Clase FicheroUTFApp

El programa se divide en dos fases principales:

  • Escritura de objetos: se instancian elementos de la clase interna amigo y se registran secuencialmente en el archivo binario amigos.txt.
  • Lectura de objetos: se recupera cada objeto mediante un bucle infinito que procesa registros hasta capturar la excepción estándar EOFException (fin del fichero).

Código Fuente Completo

package ficheroutfapp;

import java.io.*;

public class FicheroUTFApp {

public static class amigo implements java.io.Serializable {
protected String nombre;
protected long telefono;

public amigo(String n, long t) {
nombre = n;
telefono = t;
}

public void print() {
System.out.println(nombre + " -> " + telefono);
}
}

public static void main(String[] args) {
String[] amigos = {"Andrés Rosique", "Pedro Ruiz", "Isaac Sánchez", "Juan Serrano"};
long[] telefonos = {653364787L, 627463746L, 644567346L, 623746348L};

// Escritura del fichero
try {
FileOutputStream fs = new FileOutputStream("amigos.txt");
ObjectOutputStream oos = new ObjectOutputStream(fs);

for (int i = 0; i < 4; i++) {
amigo a = new amigo(amigos[i], telefonos[i]);
oos.writeObject(a);
}

if (oos != null) {
oos.close();
fs.close();
}
} catch (IOException e) {
e.printStackTrace();
}

// Lectura del fichero
try {
File f = null;
FileInputStream fe = null;
ObjectInputStream ois = null;
try {
f = new File("amigos.txt");
if (f.exists()) {
fe = new FileInputStream(f);
ois = new ObjectInputStream(fe);
while (true) {
amigo a = null;
a = (amigo) ois.readObject();
a.print();
System.out.println("");
}
}
} catch (EOFException eof) {
System.out.println("------------------");
} catch (FileNotFoundException fnf) {
System.err.println("Fichero no encontrado: " + fnf);
} catch (IOException e) {
System.err.println("Se ha producido una IOException");
e.printStackTrace();
} catch (Throwable e) {
System.err.println("Error de programa: " + e);
e.printStackTrace();
} finally {
if (ois != null) {
ois.close();
fe.close();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

Puntos Clave del Manejo de Excepciones

  • EOFException: señala de manera natural la finalización de los datos disponibles en el flujo binario sin incurrir en lecturas nulas erróneas.
  • Cierre seguro en bloque finally: garantiza la liberación adecuada de los descriptores de archivo asociados a FileInputStream y ObjectInputStream.

Descargar

PDF Word HTML