Persistencia de objetos. Serialización.

La serialización consiste en codificar un objeto como una secuencia de bytes para almacenarlos en memoria o en un archivo para poder guardar el estado de los objetos aunque se cierre el programa. Es utilizada para conseguir persistencia entre diferentes sesiones y para poder transmitir objetos remotamente a través diferentes máquinas de una red, proceso conocido como invocación remota de objetos(RMI).

Para serializar un objeto, es necesario que el objeto mismo implemente el interfaz ‘Serializable’.

Al serializar un objeto, todos sus miembros son serializados aunque sean private. Para evitarlo debemos utilizar el modificador transient que ocultará estos miembros.

A continuación pongo un ejemplo de una colección de libros. Tenemos la clase ‘Libro’ que tiene 3 miembros con sus correspondientes setters y getters y que, por supuesto, implementa la interfaz Serializable.
También se puede encontrar la clase ‘Gestión’ con dos métodos, uno que serializa una lista de libros de ejemplo y otro método que recupera el objeto desde el archivo que contiene los objetos serializados. Lo que se ha hecho ha sido serializar la lista directamente.

Clase ‘Main’:


package series;

public class Main {
	public static void main(String[] args) {
		Gestion gestion = new Gestion();
		gestion.serializarBiblioteca();
		gestion.deserializarBiblioteca();
	}
}

Clase ‘Gestion’:


package series;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Iterator;

public class Gestion {

	public void serializarBiblioteca(){
		ArrayList biblioteca = new ArrayList();

		//creacion de libros
		biblioteca.add(new Libro("La fundacion", "Isaac Asimov", 10));
		biblioteca.add(new Libro("Las dos torres", "JRR Tolkien", 20));
		biblioteca.add(new Libro("La cena secreta", "Javier Sierra", 15));

		try {
			FileOutputStream fos = new FileOutputStream("biblio.dat");
			ObjectOutputStream salida = new ObjectOutputStream(fos);
			salida.writeObject(biblioteca);
			salida.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		System.out.println("Biblioteca serializada");
	}

	@SuppressWarnings("unchecked")
	public void deserializarBiblioteca(){
		ArrayList biblioteca = new ArrayList();

		try {
			FileInputStream is = new FileInputStream("biblio.obj");
			ObjectInput oi = new ObjectInputStream(is);
			biblioteca = (ArrayList) oi.readObject();
			oi.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		System.out.println("Leyendo biblioteca");
		for (Iterator iter = biblioteca.iterator(); iter.hasNext();) {
			Libro element = iter.next();
			System.out.println("Titulo: "+element.getTitulo());
			System.out.println("Autor: "+element.getAutor());
			System.out.println("Precio: "+element.getPrecio());
			System.out.println("");
		}
	}
}

Clase ‘Libro’:


package series;

public class Libro implements java.io.Serializable{
	private static final long serialVersionUID = -5499918610561500376L;
	private String titulo;
	private String autor;
	private int precio;

	public Libro(String titulo, String autor, int precio){
		this.setAutor(autor);
		this.setTitulo(titulo);
		this.setPrecio(precio);
	}
	public String getAutor() {
		return autor;
	}
	public void setAutor(String autor) {
		this.autor = autor;
	}
	public int getPrecio() {
		return precio;
	}
	public void setPrecio(int precio) {
		this.precio = precio;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
}
Sin categoría

Deja una respuesta