UNIVERSIDAD NACIONAL
TORIBIO RODRÍGUEZ DE MENDOZA DE AMAZONAS
FACULTAD DE INGENIERÍA DE SISTEMAS Y MECÁNICA
ELÉCTRICA.
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
✔ SEMESTRE ACADÉMICO: 2021-II
✔ NOMBRE DEL CURSO:
❖ SISTEMAS DISTRIBUIDOS
✔ TÍTULO DEL INFORME O TRABAJO:
❖ SERIALIZACIÓN EN JAVA
✔ INTEGRANTES:
❖ AMBULAY ESTELA STHEFANY FIORELA
❖ MERLYN MARIN MELENDEZ
✔ DOCENTE DEL CURSO:
Ing. MANUEL SÁNCHEZ FERNÁNDEZ
Bagua, 2021
1
ÍNDICE
INTRODUCCIÓN 3
SERIALIZACIÓN DE OBJETOS 4
Estado de un objeto 5
Serialización a medida 6
¿Qué es Serializable? 6
EJEMPLO 7
CONCLUSIONES 10
REFERENCIAS 10
2
INTRODUCCIÓN
La serialización de un objeto consiste en obtener una secuencia de bytes que representa
el estado de dicho objeto. Esta secuencia puede utilizarse de varias maneras (puede
enviarse a través de la red, guardarse en un fichero para su uso posterior, utilizarse para
recomponer el objeto original, etc.).
La serialización de un objeto consiste en obtener una trama de bytes que representa el
estado de un objeto, donde podrá ser escrito dentro de un archivo, o bien, para ser
enviado a través de una red. Una característica importante es que esto hace posible la
persistencia de objetos, es decir, el estado de un objeto se almacena para su uso
posterior.
3
SERIALIZACIÓN DE OBJETOS
Java facilita el almacenamiento y transmisión del estado de un objeto mediante un
mecanismo conocido con el nombre de serialización.
La serialización de un objeto consiste en generar una secuencia de bytes lista para su
almacenamiento o transmisión. Después, mediante la deserialización, el estado original
del objeto se puede reconstruir.
La serialización de un objeto consiste en obtener una trama de bytes que representa el
estado de un objeto, donde podrá ser escrito dentro de un archivo, o bien, para ser
enviado a través de una red. Una característica importante es que esto hace posible la
persistencia de objetos, es decir, el estado de un objeto se almacena para su uso
posterior.
ObjectInputStream
ObjectOutputStream
Para que un objeto sea serializable basta con que implemente la interfaz Serializable.
Como la interfaz Serializable no tiene métodos, es muy sencillo implementarla, basta
con un implements Serializable y nada más. Por ejemplo, la clase Datos siguiente es
Serializable y Java sabe perfectamente enviarla o recibirla por red, a través de socket o
de rmi. También java sabe escribirla en un fichero o reconstruirla a partir del fichero.
public class Datos implements Serializable
{
public int a;
public String b;
public char c;
4
}
Si dentro de la clase hay atributos que son de otras clases, éstos a su vez también deben
ser Serializables. Con los tipos de java (String, Integer, etc.) no hay problema porque lo
son. Si ponemos como atributos nuestras propias clases, éstas a su vez deben
implementar Serializable.
Por ejemplo
/* Esta clase es Serializable porque implementa Serializable y todos sus * campos son
Serializable, incluido "Datos f;"
*/public class DatoGordo implements Serializable{
public int d;
public Integer e;
Datos f;
}
Estado de un objeto
El estado de un objeto viene dado, básicamente, por el estado de sus campos. Así,
serializarun objeto consiste, básicamente, en guardar el estado de sus campos. Si el
objeto a serializartiene campos que a su vez son objetos, habrá que serializarlos primero.
Éste es un procesorecursivo que implica la serialización de todo un grafo (en realidad,
un árbol) de [Link]ás, también se almacena información relativa a dicho árbol,
para poder llevar a cabo lareconstrucción del objeto [Link] ocasiones puede
interesar que un atributo concreto de un objeto no sea serializado. Esto se puede
conseguir utilizando el modificador transient, que informa a la JVM de que no
nosinteresa mantener el valor de ese atributo para serializarlo o hacerlo persistente.
Ejemplo:
public class MiFecha{
protected int n;
protected Date fecha;
protected transient long s;. . .}
En este ejemplo, los atributos n y fecha serán incluídos en la secuencia de bytes
resultante deserializar un objeto de clase MiFecha. El atributo s no será incluído, por
tener el modificadortransient
5
Serialización a medida
En realidad, se llama "serializar un objeto" al proceso de convertirlo a bytes, para poder
enviarlo por una red, y reconstruirlo luego a partir de esos bytes.A veces podemos
necesitar que se haga algo especial en el momento de serializarlo, bien al construirlo a
bytes, bien al recibirlo. Por ello java nos permite hacerlo. Basta con hacer que nuestro
objeto defina uno o los dos métodos siguientes:
private void readObject([Link] stream)
throws IOException, ClassNotFoundException
{
// Aquí debemos leer los bytes de stream y reconstruir el objeto
}
private void writeObject([Link] stream)
throws IOException
{
// Aquí escribimos en stream los bytes que queramos que se envíen por red.
}
java llamará a estos métodos cuando necesite convertir en bytes para enviarlo por red o
cuando necesite reconstruirlo a partir de los bytes en red.
¿Qué es Serializable?
Serializable es una clase ubicada en el paquete [Link], la cual no cuenta
con ningún método, por lo que es una clase que sirve solamente para especificar que
todo el estado de un objeto instanciado podrá ser escrito o enviado en la red como una
trama de bytes.
Hay que tomar en cuenta que, si un objeto tiene como atributo otro objeto, entonces se
debe declarar ese objeto del tipo Serializable, y estos serán serializados primero. Esto se
puede tomar como un árbol, donde las hojas son objetos que forman parte de otro objeto
como un atributo, y todos ellos son marcados como serializables, para así entonces
serializar primero las hojas del árbol y finalizar con la raíz.
Habrá ocasiones donde queramos exceptuar un atributo del objeto que no queramos
serializar, y para esto se encuentra el modificador Transient. Este modificador le indica
a la JVM (Java Virtual Machine) que dicho atributo deberá ser exento de la
serialización, en otras palabras, ignorará este atributo.
6
Los atributos que lleven el modificador Static nunca se tomarán en cuenta al serializar
un objeto, ya que este atributo pertenece a la clase y no al objeto.
Para que un objeto sea serialización, ha de implementar la interfaz [Link]
(que lo único que haces es marcar el objeto como serializable, sin que tengamos que
utilizar ningún método).
EJEMPLO
import [Link];
import [Link];
public class Contacto implements Serializable
{
private String nombre;
private String telefono;
private String email;
private String direccion;
private Date nacimiento;
private String int grupo;
private double deuda;
Para que un objeto sea serializable, todas sus variables de instancia han de ser
serializable
Todos los tipos primitivos en Java son serializables por defecto (igual que los arrays y
otros muchos tipos estándar).
Serialización
import [Link].*;
public class ContactoOutput
{
private FileOutputStream file;
private ObjectOutputStream output;
// Abrir el fichero
public void abrir()
thorws IOException
{
file= new FileOutputStream ( “[Link]” );
output = new ObjectOutputStream(file);
}
7
//Cerrar el fichero
public void cerrar ()
throws IOException
{
if (output != null)
[Link]();
}
//
public void escribir (Contacto contacto)
throws OIException
{
if (output != nell=
[Link](contacto);
}
}
Deserialización
import [Link].*;
public class ContactoInput
{
private FileInputStream file;
private ObjectInputStream input;
public void abrir ()
throws IOException
{
file = new FileInputStream( “[Link]”);
input = new ObjectInputStream (file);
}
public void cerrar()
thrws IOException
{
if (input != null)
[Link]();
}
public Contacto leer()
throws IOExption, ClassNotFoundException
{
Contacto contacto = null;
if (input!=null){
try {
contacto = (contacto) [Link]();
} catch (EOFException eof) {
// Fin del Fichera
}
}
8
return contacto;
}
}
Uso
Escritura de datos
ContactoOutput salida;
[Link]();
[Link] ( contacto1 );
[Link] ( contacto2 );
[Link]();
Lectura de Datos
Cotacto contacto;
ContactoInput entrada;
entrada = new ContactoInput ();
[Link]();
do{
contacto = [Link]();
[Link] (contacto);
} While (contacto !=null);
[Link]();
9
CONCLUSIONES
La serialización se utiliza para la persistencia en Java. Puede estar bien persistir algunos
objetos utilizando la serialización. Pero, para una gran cantidad de objetos, ORM, Base
de datos, etc. puede ser mejor. Parece que la serialización es útil solo para trabajos
pequeños.
REFERENCIAS
Gómez C, M. (2015). serialización. [Link].
[Link]
T. (204d. C.). Serialización en Java. Scribd.
[Link]
Serialización. Ficheros de Objetos en Java. Interface Serializable. (2012). Programación
Java. [Link]
[Link]
10