• No se han encontrado resultados

CAPÍTULO 9 SERIALIZACIÓN (ALMACENAMIENTO DE OBJETOS EN ARCHIVOS)

N/A
N/A
Protected

Academic year: 2021

Share "CAPÍTULO 9 SERIALIZACIÓN (ALMACENAMIENTO DE OBJETOS EN ARCHIVOS)"

Copied!
18
0
0

Texto completo

(1)

CAPÍTULO 9 SERIALIZACIÓN

(ALMACENAMIENTO DE OBJETOS EN ARCHIVOS)

(2)

3

Preguntas detonadoras

¿Qué es y para qué sirve la serialización?

¿Se pueden almacenar objetos en un archivo?

¿Cómo?

Serialización

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.

(3)

¿Para qué sirve la serialización?

Para transformar los datos y poder transferirlos por un canal de comunicación (internet, archivo, memoria, etc.)

Para compartir información de un sistema en otra aplicación.

5

Tipos de serialización en el Framework .NET

Tipos de serialización

• Binario

• SOAP

• XML

(4)

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

Durante la serialización, 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]

7

Ejemplo en UML

(5)

Ejemplo codificado en C#

9

[Serializable]

class Empleado {

// Atributos privados

// Propiedades públicas

… }

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

(6)

Crear un archivo

Para grabar datos en un archivo, primero debe crearse mediante:

// Declaración del flujo del archivo

private System.IO.FileStream flujo;

// Creación del archivo

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

11

Serializar el archivo creado

Declaración del formateador para serializar el archivo

System.Runtime.Serialization.Formatters.Binary.Bina ryFormatter seriador;

seriador = new BinaryFormatter();

(7)

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

Almacena miObjeto en el archivo controlado por flujo

seriador.Serialize(flujo, miObjeto);

13

Cerrar el archivo

Una vez usado el archivo, entonces debe cerrarse mediante:

if (flujo != null) flujo.Close();

(8)

Abrir un archivo en modo lectura

Para leer datos de un archivo, primero debe abrirse mediante:

// Declaración 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

Declaración del formateador para serializar el archivo

System.Runtime.Serialization.Formatters.Binary.Bina ryFormatter seriador;

seriador = new BinaryFormatter();

(9)

¿Cómo leer un objeto del archivo serializado?

A este proceso se le conoce como deserialización.

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

(10)

Modos de apertura de archivos (FileMode)

19

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)

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

(11)

¿Cómo detectar si existe un archivo?

if (File.Exists(NombreArchivo)) {

……

}

21

Diseño de una clase para el

manejo de un archivo serializable

(12)

23

Constructor

ArchivoSecuencialSerializadoBinario.ArchivoSecuencialSerializadoBinario(string strNombreArchivo)

NombreArchivo = strNombreArchivo

return

Destructor

ArchivoSecuencialSerializadoBinario. ~ArchivoSecuencialSerializadoBinario()

this.Cerrar()

(13)

25

Método para crear el archivo

ArchivoSecuencialSerializadoBinario.Crear() : void

return

flujo = new FileStream(NombreArchivo, FileMode.Create)

seriador = new BinaryFormatter()

Método para abrir el archivo en modo escritura

ArchivoSecuencialSerializadoBinario.AbrirEnModoEscritura() : void

FILE.Exists(NombreArchivo) flujo = new FileStream(NombreArchivo, FileMode.Append) yes

this.Crear() no

seriador = new BinaryFormatter()

(14)

27

Método para abrir el archivo en modo lectura

ArchivoSecuencialSerializadoBinario.AbrirEnModoLectura() : void

return

FILE.Exists(NombreArchivo) flujo = new FileStream(NombreArchivo, FileMode.Open) yes

no

seriador = new BinaryFormatter() throw new Exception("No existe el archivo "+NombreArchivo)

Método para abrir el archivo en modo lectura y escritura

ArchivoSecuencialSerializadoBinario.AbrirEnModoLecturaYEscritura() : void

FILE.Exists(NombreArchivo) yes

no

flujo = new FileStream(NombreArchivo, FileMode.Open, FileAccess.ReadWrite)

this.Crear()

(15)

29

Método para grabar un objeto en el archivo

ArchivoSecuencialSerializadoBinario.GrabarObjeto(Tipo miObjeto) : void

return

seriador.Serialize(flujo, miObjeto)

Método para leer un objeto del archivo

ArchivoSecuencialSerializadoBinario.LeerObjeto() : Tipo

Declarar miObjeto como Tipo

miObjeto = (Tipo) seriador.Deserialize(flujo)

(16)

31

Método para cerrar el archivo

ArchivoSecuencialSerializadoBinario.Cerrar() : void

flujo != null flujo.Close() yes

return no

Declaración y creación del objeto global para controlar el archivo

// Declaración y creación global de un objeto para el archivo

ArchivoSecuencialSerializadoBinario<Empleado> miArchivo

= new ArchivoSecuencialSerializadoBinario<Empleado>

("c:\\Datos\\Empleados.dat");

(17)

33

miEmpleado en miArchivo?

EmpleadomiEmpleado = newEmpleado();

try {

miEmpleado.Numero=int.Parse(txtNumero.Text);

miEmpleado.Nombre = txtNombre.Text;

miEmpleado.Sueldo = double.Parse(txtSueldo.Text);

}

catch(Exceptionex) {

MessageBox.Show(ex.Message);

return;

}

try {

// Abrir el archivo para escribir en él miArchivo.AbrirEnModoEscritura();

// Grabar el objeto

miArchivo.GrabarObjeto(miEmpleado);

MessageBox.Show("Datos almacenados correctamente !!!");

}

catch(Exceptionex) {

MessageBox.Show(ex.Message);

} finally {

miArchivo.Cerrar();

}

// Mostrar los datos de los autos en el dataGridView MostrarDatos();

}

¿Cómo grabar el objeto miEmpleado en miArchivo?

void MostrarDatos() {

// Declaración y creación de un objeto local Empleado miEmpleado = new Empleado();

// Limpia el dataGridView dgEmpleados.Rows.Clear();

try {

// Abrir el archivo para leer miArchivo.AbrirEnModoLectura();

while(true) {

// Lee un objeto del archivo miEmpleado = miArchivo.LeerObjeto();

// Muestra los datos del objeto leído en el dataGridView

dgEmpleados.Rows.Add(miEmpleado.Numero.ToString(), miEmpleado.Nombre, miEmpleado.Sueldo.ToString(“C”));

} }

catch (Exception ex) {

(18)

Otros títulos del autor

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

Bruno López Takeyas [email protected]

Referencias

Documento similar

[ Además de compartir el catálogo de procedimientos y de tipos documentales, sólo deben cargarse datos que se puedan asociar con las bases de datos corporativa

El contar con el financiamiento institucional a través de las cátedras ha significado para los grupos de profesores, el poder centrarse en estudios sobre áreas de interés

Debido al riesgo de producir malformaciones congénitas graves, en la Unión Europea se han establecido una serie de requisitos para su prescripción y dispensación con un Plan

Como medida de precaución, puesto que talidomida se encuentra en el semen, todos los pacientes varones deben usar preservativos durante el tratamiento, durante la interrupción

Además de aparecer en forma de volumen, las Memorias conocieron una primera difusión, a los tres meses de la muerte del autor, en las páginas de La Presse en forma de folletín,

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

Ahora bien, las interacciones entre los humanos pueden ser efímeras e informales, sea en los encuentros cara o cara, como una pelea callejera o una cópula sexual entre

Habilidad para construir y criticar argumentos formales e informales en relación a problemas de las diversas ciencias, formales o empíricas, así como de problemas de lógica,