You are on page 1of 4

La Serializaci on de Objetos en Java

Programaci on de Sistemas Distribuidos Universidad de La Laguna Escuela T ecnica Superior Superior de Ingenier a Inform atica Dpto. Sistemas Inform aticos y Computaci on 2004-2005

Resumen El t ermino empaquetamiento de datos (data marshaling ), en el contexto de comunicaciones entre procesos, se utiliza para referirse a las transformaciones necesarias para transmitir valores de datos o estructuras. Las aplicaciones distribuidas escritas en lenguajes orientados a objeto requieren el encapsulamiento tanto de datos (representando el estado del objeto), como de m etodos (representando el comportamiento del objeto). Debido a la complejidad que esto implica se le ha dado el nombre de serializaci on de objetos.

1.

Introducci on

La serializaci on de objetos en Java proporciona una soluci on intermedia para salvar objetos en cheros y transmitirlos a trav es de la red. Tanto RMI (Remote Method Invocation ) como el API de JavaBeans utilizan la serializaci on para guardar y transmitir objetos. Por lo tanto, en toda aplicaci on Java en la que se vean involucradas la persistencia o distribuici on de objetos, se puede utilizar la serializaci on de objetos. La serializaci on de objetos en Java permite escribir y leer objetos en ujos (streams ), sean estos cheros o sockets. Esto proporciona a los programadores una forma sencilla de guardar tanto objetos individuales como grandes estructuras de objetos en cheros, o enviarlos a trav es de la red. Desde la perspectiva del programador, gran parte de este trabajo se realiza autom aticamente. El mecanismo de serializaci on mantiene control sobre los tipos de los objetos, las referencias entre ellos y muchos detalles de c omo est an almacenados los datos.

2.

Ejemplo
Considere la clase empleado (Employee) que incluye serializaci on de objetos.

Programaci on de Sistemas Distribuidos 04-05

import java.io.*; public class Employee implements Serializable { String name; int age; int salary; public Employee(String name, int age, int salary) { this.name = name; this.age = age; this.salary = salary; } public void show() { System.out.println("Empleado: " +name+ " Edad: " +age+ " Salario: "+salary); } }

Lo primero que se ha de hacer es implementar la interfaz Serializable para indicarle a la JVM de la intenci on de serializar objetos. Dicha interfaz pertenece al paquete java.io. La interfaz Serializable no tiene m etodos, por lo que no es necesario cambiar la clase de ninguna forma. A continuaci on se ha de desarrollar una clase que cree instancias de la clase Employee y las serialize guardando sus estados en una chero empl.dat. La clase (SaveEmp) crea dos objetos Pepe y Juan. Para guardar un objeto, primero hay que abrir un objeto ObjectOutputStream:
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("empl.dat"));

Para realizar almacenamientos basta con invocar al m etodo writeObject de la clase ObjectOutputStream:
Employee pepe = new Employee("Pepe", 27, 3500); Employee juan = new Employee("Juan", 29, 3900); oos.writeObject(pepe); oos.writeObject(juan);

Si se ejecuta el programa SaveEmp se almacenaran los objetos pepe y juan en el chero empl.dat. La clase ReadEmp lee del chero empl.dat, deserializa los objetos pepe y juan y muestra el contenido de los objetos por la consola. Para leer los objetos, primero hay que crear un objeto ObjectInputStream.
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("empl.dat"));

Despu es los objetos se recuperan en el mismo orden en el que fueron escritos mediante el m etodo readObject:
Employee pepe = (Employee) ois.readObject(); Employee juan = (Employee) ois.readObject();

Cuando se recuperan objetos es muy importante saber cu antos de ellos se han guardado, su orden y sus tipos. Cada llamada a readObject lee otro objeto de tipo Object. Por lo tanto, hay que hacer el typecast al tipo que se necesite.

Programaci on de Sistemas Distribuidos 04-05

3.
1. 2.

Ejercicios
Compile y ejecute el ejemplo de la clase Employee. Implementar una aplicaci on cliente/servidor en la cual el cliente env e dos arrays de enteros al servidor, este los sume y devuelva el array resultado al cliente usando serializaci on de objetos. Desarrollo de una clase serializable (DataObj) Se necesita una clase que sirva como interfaz entre el cliente y el servidor. En esta clase se denir an tres m etodos: uno para inicializar los valores del array (set), uno para obtener los valores del array (get) y uno para mostrar el contenido del mismo (show). Implementaci on del servidor (ArithServer) El servidor ser a un servidor simple que espera por una conecci on. Cuando la conexi on se establezca, leer a los objetos que le env a el cliente. Realizar a la suma y devolver a el objeto resultado. Implementaci on del cliente (ArithClient) El cliente ser a un cliente simple. Ha de denir dos objetos arrays con los que realizar a su solicitud al servidor. Cuando recibe el resultado lo muestra por la pantalla.

3. Extra. Implementar una aplicaci on cliente/servidor en la cual el cliente env e dos arrays de enteros al servidor, este los sume y devuelva el array resultado al cliente sin utilizar la serializaci on de objetos autom atica que proporciona la clase Serializable. Desarrollo de una clase que proporcione la operaci on de suma de dos arrays (ArrayMath) Se necesita una clase que sirva para representar objetos que permiten la operaci on de suma entre dos arrays. En esta clase se denir a el m etodo que recibe como entrada dos arrays de enteros y devuelve el array suma (addArray). Desarrollo de una clase que permita la escritura de arrays en ujos de entrada salida (ArrayIO) Se necesita una clase que sirva como interfaz entre el cliente y el servidor que permita trabajar con arrays de enteros. En esta clase se han de denir dos m etodos: uno para escribir un array en un canal de salida (writeArray) y uno para leer un array de un canal de entrada (readArray). Implementaci on del servidor (Server) El servidor ser a un servidor simple que espera por una conecci on. Cuando la conexi on se establezca, leer a los arrays que le env a el cliente. Realizar a la suma y devolver a el objeto resultado.

Programaci on de Sistemas Distribuidos 04-05

Implementaci on del cliente (Client) El cliente ser a un cliente simple. Ha de denir dos arrays con los que realizar a su solicitud al servidor. Cuando recibe el resultado lo muestra por la pantalla.

You might also like