09.-serializacion

13
Programación orientada a objetos en C# .NET Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu.mx/Takeyas 1 CAPÍTULO 9 SERIALIZACIÓN (ALMACENAMIENTO DE OBJETOS EN ARCHIVOS) 2

Upload: jaime-andres-castiblanco-acuna

Post on 14-Dec-2015

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 1

CAPÍTULO 9SERIALIZACIÓN

(ALMACENAMIENTO DE OBJETOS EN ARCHIVOS)

2

Page 2: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 2

Serialización

�Es el proceso para almacenar unobjeto en un dispositivo dealmacenamiento secundario.

�Almacenar un objeto en un archivoen el disco duro, memoria USB, CD,etc.

3

¿Para qué sirve la serialización?

�Para transformar los datos y podertransferirlos por un canal decomunicación (internet, archivo,memoria, etc.)

�Para compartir información de unsistema en otra aplicación.

4

Page 3: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 3

Tipos de serialización en el Framework .NET

Tipos de serialización

• Binario

• SOAP

• XML

5

¿Cómo preparar una clase para serializar sus objetos?

�Durante la serialización, los atributos,nombre de la clase y su ensamblado seconvierten en una secuencia de bytes.

�Para serializar un objeto, su clase debedeclararse como [Serializable]

6

Page 4: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 4

Ejemplo en UML

7

Ejemplo codificado en C#

8

[Serializable]class Empleado{

// Atributos privados…

// Propiedades públicas…

}

Page 5: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 5

Espacios de nombres requeridos

using System.IO; // Para el uso

de archivos

using

System.Runtime.Serialization.For

matters.Binary; // Para el uso

de la serialización

9

Crear un archivo�Para grabar datos en un archivo, primero debe

crearse mediante:

// Declaración del flujo delarchivoprivate System.IO.FileStream flujo;

// Creación del archivo

flujo = new FileStream(NombreArchivo, FileMode.Create);

10

Page 6: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 6

Serializar el archivo creado

�Declaración del formateador paraserializar el archivo

System.Runtime.Serialization.Formatters.Binary.Bina

ryFormatter seriador;

seriador = new BinaryFormatter();

11

¿Cómo grabar un objeto en el archivo serializado?

�Almacena miObjeto en el archivocontrolado por flujo

seriador.Serialize(flujo, miObjeto);

12

Page 7: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 7

Cerrar el archivo

�Una vez usado el archivo, entonces debecerrarse mediante:

if (flujo != null)

flujo.Close();

13

Abrir un archivo en modo lectura�Para leer datos de un archivo, primero debe

abrirse mediante:

// Declaración del flujo delarchivoprivate System.IO.FileStream flujo;

// Apertura del archivo

flujo = new FileStream(NombreArchivo, FileMode.Open);

14

Page 8: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 8

Serializar el archivo abierto en modolectura

�Declaración del formateador paraserializar el archivo

System.Runtime.Serialization.Formatters.Binary.Bina

ryFormatter seriador;

seriador = new BinaryFormatter();

15

¿Cómo leer un objeto del archivoserializado?

�A este proceso se le conoce comodeserialización.

�Lee miObjeto del archivo controlado porflujo

miObjeto = seriador.Deserialize(flujo);

16

Page 9: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 9

Modos de apertura de archivos(FileMode)

17

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.

Modos de acceso de archivos(FileAccess)

18

FileAccess Uso

Read Acceso al archivo en modo de solo lectura

ReadWrite Acceso al archivo en modo de lectura y escritura

Write Acceso al archivo en modo de solo escritura

Page 10: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 10

¿Cómo detectar si existe un archivo?

if (File.Exists(NombreArchivo))

{

……

}

19

Diseño de una clase para el manejo de un archivo serializable

20

Page 11: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 11

Desplazamiento del apuntador interno en un archivo secuencial

21

�Cuando se lee un registro completo, elapuntador interno del archivo seposiciona al inicio del siguiente registro.

�Por lo tanto, debe ponerse especialatención a la posición del apuntadorinterno antes de realizar una operaciónen el archivo.

Ejemplo: Modificar el primer registro

22

�Al leer el primerregistro,automáticamentese posiciona en elsegundo registro

�Modificar los datosde “Pepe” por losde “Pancho”

Page 12: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 12

Error común al modificar un registro

23

� Si no se reposicionael apuntadorinterno, entoncesocurre un error

�Permanecen losdatos de “Pepe”

� Se empalman losdatos de “Pancho”en el registro de“Bruno”

NOTA IMPORTANTE

24

Se debe reposicionar el apuntador interno del archivo antes de escribir

un registro modificado

Page 13: 09.-Serializacion

Programación orientada a objetos en C# .NET

Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 13

¿Cómo reposicionar el apuntadorinterno del archivo?

25

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);

}

Otros títulos del autor

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

Bruno López [email protected]