Programacionavanzada2

Page 111

Rodríguez-Losada & San Segundo, 2009. Programación Avanzada, Concurrente y Distribuida

111

6.4.2 Sin formato (binaria) En el apartado anterior, si deseamos hacer una serialización binaria por eficiencia, o simplemente porque no queremos que los datos sean fácilmente visibles, podríamos intentar abrir el fichero en modo binario: ofstream file("Bosque.txt",ios::binary);

Pero esto no es suficiente, ya que los operadores inserción y extracción trabajan sobre los tipos básicos siempre con formato (en modo texto), y por tanto se serializan de ese modo, aunque el fichero sea abierto en modo binario. Si se desea que la serialización sea completamente binaria, hay que recurrir a las funciones especificas de la IOStream library que hacen estas tareas. Estas funciones se llaman típicamente “read” y “write”. Añadimos a todas nuestras clases unos métodos que se llamen de forma similar, y que admitan una referencia a stream. Gracias a esta referencia, podremos utilizar el polimorfismo, y nuestros métodos funcionarán igual para las clases derivadas correspondientes (fstreams y stringstreams). Los siguientes métodos serán entonces añadidos a las clases Bosque, Arbol, Esfera y Cilindro: void Read(std::istream& str); void Write(std::ostream& str);

La filosofía coincide completamente con la desarrollada anteriormente en lenguaje C, a excepción que ahora se utilizan las funciones de lectura y escritura sin formato (read y write) en un stream: void Bosque::Read(std::istream& str) { str.read((char*)&numero,sizeof(numero)); int i; for(i=0;i<numero;i++) arbol[i].Read(str); } void Bosque::Write(std::ostream& str) { str.write((char*)&numero,sizeof(numero)); int i; for(i=0;i<numero;i++) arbol[i].Write(str); }

Como anteriormente, preservar el orden es totalmente necesario: void Arbol::Read(std::istream& str) { str.read((char*)&x,sizeof(float)); str.read((char*)&y,sizeof(float)); tronco.Read(str); copa.Read(str); } void Arbol::Write(std::ostream& str) { str.write((char*)&x,sizeof(float)); str.write((char*)&y,sizeof(float)); tronco.Write(str); copa.Write(str); }

Universidad Politécnica de Madrid -UPM


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.