title image


Smiley Re: link inside
So einfach läßt sich das nicht beantworten;)



1)Mußt du polymorphe Klassen in der Datei speichern?



ja : du brauchst Serialisierung, und meistens auch noch eine Factory, die vor dem Lesen aus der Datei die Datenklassen dynamisch erzeugen kann.



nein : weiter mit 2)



2)Sind die Klassen, die im File gepeichert werden sollen, Aggregate?



ja : Du *kannst* blockweise lesen und schreiben sowie indiziert auf die Datei zugreifen (z.B.: Filepointer mit "sizeof(Daten) * index" an die gewünschte Position setzen und danach "sizeof(Daten)" lesen oder schreiben). Die Datei kann dann auf anderen Systemen u.U. nicht mehr gelesen/geschrieben werden (Datenausrichtung, little/big endian, 64/32Bit, etc.).



nein : Serialisierung



Beispiel für eine Klasse, die serialisiert werden muß:



class LogDaten

{

std::string message_; // Klasse mit Zeiger auf dynamisch reservierten Speicher

int *intpointer_; // Pointer

int &ref_; // Referenz

};



Beispiel für eine Klasse (Aggregat), die (das) binär geschrieben werden kann:



struct LogDaten

{

int i_; // fixe Größe

char message_[80]; // fixe Größe

double d_; // fixe Größe

};



Disclaimer: Da die Datenblöcke in einer serialisierten Datei möglicherweise nicht gleich groß sind (im Beispiel oben kann die Stringklasse Zeichenketten variabler Länge enthalten), kannst du auch nicht so ohne Weiteres indiziert darauf zugreifen. Du kannst aber z.B. eine zweite Datei erzeugen, in der du den "Positionsoffset" für jedes Objekt der Datendatei speicherst. Ist nicht zuletzt auch eine Frage des Aufwands, den du treiben möchtest.



cu,

BF



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: