Einzelnen Beitrag anzeigen

NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#1

Klasse mit vielen MemoryStreams (andere Möglichkeit)

  Alt 2. Jan 2011, 09:36
So hallo erstmal wieder...
Es geht im Folgendes:
Ich arbeite bei meinem Spiel mit der ZLib von JVCL (damit man die Dateien nicht mit jedem Zip programm lesen kann )
Das funkt soweit super. Nur wollte ich dies auch für eine gepackte Datei verwenden, die alle Texturen enthält.
Packen geht. So nur entpacken geht nur in einen Ordner und dan werden dort die Dateien gespeichert. Was ich dumm finde bei einem Spiel, da es unnötig Speicherplatz wegnihmt (wenn mal viele drin sind dan nochmal entpacket..ist irgendwie unprofessionel)
Also dachte ich mir ich schreib mir die Komponente für meine Gebrauch ein wenig um. Die Funktion DecompressFile arbeitet mit TFileStreams zum speichern der entpackten Dateien.
Nun wollte ich mit TObjectList eine Klasse machen, die mehrere TMemoryStreams (weil ich keine anderen Stream kenne bei Delphi2009, der Daten in den Speicher läd) aufnihmt. So nun beim erstellen des Streams gehts noch wenn ich jedoch eine TMemoryStream der objektliste hinzufüge, macht er dies nicht. Bekomm ne Zugriefsverletzung. Egal wie ich es Drehte oder wendete er machte es nicht mit mehren TMemoryStreams. Daraufhin hab ich es mit einem array von Bytes gemacht. Funkt nun auch.
Ich verwende die vorgegeben Klasse TBytes (ein dynamischer array von Bytes) zum speichern der Daten einer Datei im speicher. Zum Abrufen hab ich eine Prozedur geschrieben die den array von Bytes in einen TMemoryStream kopiert, damit ich dan allgemein damit weiterarbeiten von (nämlich von Streams in meine Engine laden, gibt keine anderen Weg )
Nun zu meiner Frage:
Ist es klug nur einen Dynamischen Array zuverwenden? Der hat ja ne begrenzte Anzahl. Und in einem Stream kann ich sowieso nur 1024 Bytes mit einmal Write schreiben. Eine Datei kann aber viel größer sein, ich hab dan die befürschtung, das wenn die datei größer ist als ein dynamischer array, die dann nicht gelesen werden kann. Ist es besser einen array der so aussieht zumachen?
Code:
Dateiarray : array of array [0..1023] of Byte;
Damit hät ich einen dynamischen array von 1024 Bytes.
Oder weis wer eine andere elegantere Variante? Und warum bekomm ich bei dem versuch einen TMemoryStream in eine Objektliste hinzufügen eine zugriefsverletzung? (ich hab die TObjectList klasse umgeschrieben, mit inherite usw.)
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat