09.-serializacion
TRANSCRIPT
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
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
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
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…
}
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
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
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
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
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
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
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”
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
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]