Anda di halaman 1dari 15

Programacin Orientada a Objetos en C# .

NET

CAPTULO 9
SERIALIZACIN
(ALMACENAMIENTO DE OBJETOS EN ARCHIVOS)

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Preguntas detonadoras
Qu es y para qu sirve la serializacin?
Se pueden almacenar objetos en un archivo?
Cmo?

Serializacin
Es el proceso para almacenar un
objeto en un dispositivo de
almacenamiento secundario.
Almacenar un objeto en un archivo
en el disco duro, memoria USB, CD,
etc.
4

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Para qu sirve la serializacin?


Para transformar los datos y poder
transferirlos por un canal de
comunicacin (internet, archivo,
memoria, etc.)
Para compartir informacin de un
sistema en otra aplicacin.
5

Tipos de serializacin en el
Framework .NET
Binario

Tipos de
serializacin

SOAP
XML

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Cmo preparar una clase para


serializar sus objetos?
Durante la serializacin, los atributos,
nombre de la clase y su ensamblado se
convierten en una secuencia de bytes.
Para serializar un objeto, su clase debe
declararse como [Serializable]

Ejemplo en UML

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Ejemplo codificado en C#
[Serializable]
class Empleado
{
// Atributos privados

// Propiedades pblicas

}
9

Espacios de nombres requeridos


using System.IO; // Para el uso
de archivos
using
System.Runtime.Serialization.For
matters.Binary; // Para el uso
de la serializacin
10

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Crear un archivo
Para grabar datos en un archivo, primero debe
crearse mediante:
// Declaracin del flujo del
archivo
private System.IO.FileStream flujo;
// Creacin del archivo
flujo = new FileStream(NombreArchivo,
FileMode.Create);
11

Serializar el archivo creado


Declaracin
del
serializar el archivo

formateador

para

System.Runtime.Serialization.Formatters.Binary.Bina
ryFormatter seriador;
seriador = new BinaryFormatter();

12

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Cmo grabar un objeto en el


archivo serializado?
Almacena miObjeto
controlado por flujo

en

el

archivo

seriador.Serialize(flujo, miObjeto);

13

Cerrar el archivo
Una vez usado el archivo, entonces debe
cerrarse mediante:
if (flujo != null)
flujo.Close();

14

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Abrir un archivo en modo lectura


Para leer datos de un archivo, primero debe
abrirse mediante:
// Declaracin del flujo del
archivo
private System.IO.FileStream flujo;
// Apertura del archivo
flujo = new FileStream(NombreArchivo,
FileMode.Open);
15

Serializar el archivo abierto en modo


lectura
Declaracin
del
serializar el archivo

formateador

para

System.Runtime.Serialization.Formatters.Binary.Bina
ryFormatter seriador;
seriador = new BinaryFormatter();

16

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Cmo leer un objeto del archivo


serializado?
A este proceso se le conoce como
deserializacin.
Lee miObjeto del archivo controlado por
flujo
miObjeto =
seriador.Deserialize(flujo);
17

Prototipar al leer un objeto


Al leer datos del archivo, debe indicarse el
tipo de dato
A este proceso se le conoce como
prototipar
miEmpleado = (Empleado)
seriador.Deserialize(flujo);
18

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Programacin Orientada a Objetos en C# .NET

Modos de apertura de archivos


(FileMode)
FileMode

Uso

CreateNew

Crea un nuevo archivo. Si el archivo existe dispara una


IOException

Truncate

Abrir un archivo existente. Una vez abierto, el archivo


ser truncado a cero bytes de longitud.

Create

Crea un nuevo archivo. Si el archivo existe ser


sobreescrito.

Open

Abrir un archivo existente. Si no existe dispara una


FileNotFoundException.

OpenOrCreate Abrir un archivo existente, si no existe, lo crea.


Append

Abrir un archivo para agregar datos al final en caso de


existir; de lo contrario crea un archivo nuevo.
19

Modos de acceso de archivos


(FileAccess)
FileAccess
Read
ReadWrite
Write

Uso
Acceso al archivo en modo de solo lectura
Acceso al archivo en modo de lectura y
escritura
Acceso al archivo en modo de solo escritura

20

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

10

Programacin Orientada a Objetos en C# .NET

Cmo detectar si existe un


archivo?
if (File.Exists(NombreArchivo))
{

21

Diseo de una clase para el


manejo de un archivo serializable

22

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

11

Programacin Orientada a Objetos en C# .NET

Desplazamiento del apuntador


interno en un archivo secuencial
Cuando se lee un registro completo, el
apuntador interno del archivo se
posiciona al inicio del siguiente registro.
Por lo tanto, debe ponerse especial
atencin a la posicin del apuntador
interno antes de realizar una operacin
en el archivo.
23

Ejemplo: Modificar el primer


registro
Al leer el primer
registro,
automticamente
se posiciona en el
segundo registro
Modificar los datos
de Pepe por los
de Pancho
24

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

12

Programacin Orientada a Objetos en C# .NET

Error comn al modificar un


registro
Si no se reposiciona
el
apuntador
interno,
entonces
ocurre un error
Permanecen
los
datos de Pepe
Se empalman los
datos de Pancho
en el registro de
Bruno
25

NOTA IMPORTANTE
Se debe reposicionar el apuntador interno del
archivo antes de escribir un registro modificado

26

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

13

Programacin Orientada a Objetos en C# .NET

Cmo reposicionar el apuntador


interno del archivo?
public void ModificarObjeto(Tipo miObjeto)
{
// Reposiciona el apuntador del archivo al
// inicio del registro
flujo.Seek(PosicionAnterior, SeekOrigin.Begin);
// Graba el objeto
this.GrabarObjeto(miObjeto);
}

27

Cmo detector la posicin del


apuntador interno del archivo?
// Mtodo para leer un objeto del archivo
public Tipo LeerObjeto()
{
// Almacena la posicin actual del archivo
PosicionAnterior = flujo.Position;
// Lee el objeto del archivo
Tipo miObjeto = (Tipo) (seriador.Deserialize(flujo));
return(miObjeto);
}
28

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

14

Programacin Orientada a Objetos en C# .NET

Otros ttulos del autor


http://www.itnuevolaredo.edu.mx/Takeyas/Libro

takeyas@itnuevolaredo.edu.mx

Ing. Bruno Lpez Takeyas, M.C.


http://www.itnuevolaredo.edu.mx/Takeyas

Bruno Lpez Takeyas

15