Streams
Einleitung
Dieses Tutorial soll eine kurze Einführung in die Streams-Klassen der VCL geben.
Was ist ein Stream?
Da das Wort Streams häufig in Zusammenhang mit Dateien fällt, könnte man auf die Idee kommen, dass ein Stream nichts anderes als eine Datei sei. Stream ist aber ein allgemeinerer Begriff. Bei einem Stream geht es eigentlich nur darum, dass eine Information nach der anderen geschrieben oder gelesen wird.
In der Regel arbeitet man mit Daten, die nicht zusammenhängend im Speicher vorliegen. Will man diese Daten z.B. in einer Datei speichern oder in die Zwischenablage von Windows bringen, dann muss man diese über den Speicher verstreuten Daten irgendwie zusammen packen. Eine Möglichkeit dies zu machen ist sie als Strom von Daten zu übermitteln.
Beim Speichern von Dateien könnte man das z.B. mit den Funktionen FileRead und FileWrite aus der Unit SysUtils machen. Wir wollen uns in diesem Tutorial aber nur mit den von TStream abgeleiteten Klassen der VCL beschäftigen.
Mit diesen Klassen kann man Daten schreiben und lesen. Es spielt keine Rolle, ob die Daten in eine Datei, in den Hauptspeicher oder sonst irgendwohin geschrieben werden. Für das Schreiben und Lesen der Daten schreibt man nur einmal Code. Erst durch die Auswahl einer bestimmten Stream-Klasse wird festgelegt, wo sich die Daten tatsächlich befinden.
Wie speichert TStream Daten?
Das ist so einfach, dass es schon wieder schwierig wird. TStream speichert und liest einfach ein Byte nach dem anderen.
TStream weiß nichts über die Bedeutung der Bytes. Wenn man z.B. einen Longint mit TStream speichert, dann sind das für TStream einfach vier Bytes. TStream hat keine Ahnung, dass es sich dabei um einen Integer-Wert handelt. TStream will einfach nur eine Speicherstelle wissen und wie viele Bytes sie von dort aus lesen oder schreiben soll. TStream führt keinerlei Prüfungen durch, ob die Daten den richtigen Typ haben. Man hat also alle Freiheiten und ist somit aber auch selbst verantwortlich, dass man mit den richtigen Daten arbeitet.
Wofür kann man die Stream-Klasen konkret verwenden?
- Zum Speichern und Laden von Dateien
- Zum Austausch von Daten mit BLOB-Datenbankfeldern
- Um eigene Daten-Formate mit der Windows-Zwischenablage zu verwenden
- Um Daten zwischen zwei Anwendungen mit WM_COPYDATA auszutauschen
- und vieles mehr
Damit keine Missverständnisse aufkommen – alles was man mit den Stream-Klassen machen kann, lässt sich irgendwie auch anders machen. Der Einsatz von den Stream-Klassen erleichtert einiges, besonders, wenn man die gleichen Daten für verschiedene Zwecke benötigt, z.B. wenn sich ein Objekt in einer Datei speichern und man das Objekt auch über die Zwischenablage austauschen können soll.