Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: ClassType in ein Stream Speichern

  Alt 14. Jan 2008, 17:26
Du kannst den Stream in 2 Teile aufteilen. Am Ende des Streams wird ein Array of ClassName + ClassType gespeichert. Am Anfang stehen deine Objekte. Wenn du speicherst erzeugst du dynamisch ein Array of ClassName + ClassType. Ein Objekt schaut in diesem Array nach ob dort schon ein Record mit seinem ClassType oder ClassName drinnen steht. Wenn nicht wird ein neuer Record an's Array drangehangen. Der Index in dieses Array wird als Klassenindex im Stream gespeichert, also statt dem ClassType Zeiger oder ClassName. Wenn alle Objekte im Stream gespeichert wurden wird dieses Array noch gespeichert. Beim Laden wird zuerst dieses Array geladen. Dann werden die darin gespeicherten ClassName's benutzt um den aktuell gültigen ClassType Zeiger zu ermitteln. Hier im Forum findest du in der CodeLib eine Unit "EnumTypeInfo" mit der du das machen kannst. Nun werden die Objekte aus dem Stream geladen. Dabei lädst du den Klassenindex in das Array aus dem Stream und benutzt diesen zum direkten Zugriff auf das Array in dem ja der aktuelle Klassenname und ClassType drinnen steht. Im Array stehen also alle Klassen drinnen die im Stream gespeichert wurden. Zusätzlich hat das den Vorteil das der Stream kompakter wird als bei der Methode der VCL. Statt jedesmal den Klassennamen zu einem Objekt zu speichern und beim Laden jedesmal erst aus dem Klassennamen ein ClassType Zeiger zu machen, kostet bei der VCL Speicherplatz und Performance. Die Methode mit dem Array ist wesentlich effizienter und kostet effektiv weniger Speicherplatz.

Gruß Hagen
  Mit Zitat antworten Zitat