Die Kommunikation mit der Welt außerhalb des Hauptspeichers ist Thema dieses Kapitels. Ein Kommunikationskanal wird Stream (dt. Strom) genannt. Ein Beispiel ist eine Datei. Nachdem wir uns Dateizugriffe angesehen haben, betrachten wir allgemeine Streams.
7 Eingabe und Ausgabe
In diesem Kapitel geht es primär darum, Dateninformationen aus einer beliebigen Datenquelle zu holen und an ein beliebiges Ziel zu schicken. Meist sind sowohl die Quelle als auch das Ziel eines Datenstroms Dateien, aber es kann auch noch ganz andere Anfangs- und Endpunkte geben, beispielsweise:
- eine Benutzeroberfläche
- Netzwerkverbindungen
- Speicherblöcke
- Drucker
- andere Peripheriegeräte
In gehobenen Programmiersprachen wird ein Datenfluss als Stream bezeichnet. Ein Stream hat einen Anfangs- und einen Endpunkt: eine Quelle, aus der der Datenstrom entspringt, und das Ziel, das den Datenstrom empfängt. Die Methoden Console.WriteLine und Console.ReadLine, mit denen wir praktisch schon von der ersten Seite dieses Buches an arbeiten, erzeugen auch solche Datenströme (siehe Abbildung 7.1).
Abbildung 7.1 Datenströme einer lokalen Arbeitsstation
Die jedem Stream eigenen Charakteristika werden auf verschiedene Stream-Klassen abgebildet. Jeder Stream dient ganz speziellen Anforderungen. Beispielsweise gibt es Streams, deren Daten direkt als Text interpretiert werden, während andere nur Bytesequenzen transportieren, die der Empfänger zur Interpretation erst in das richtige Format bringen muss.
Ein Stream ist nicht dauerhaft, er wird geöffnet und liest oder schreibt Daten. Nach dem Schließen sind die Daten verloren, wenn sie nicht von einem Empfänger, beispielsweise einer Datei, dauerhaft gespeichert werden.
7.1 Namensräume der Ein- bzw. Ausgabe 

Mit externen Daten zu operieren, setzt Eingabe- und Ausgabe-Operationen (E/A-Operationen; englisch Input/Output, kurz I/O) voraus. Die in diesem Zusammenhang wichtigsten Klassen stehen im Namensraum System.IO mit folgendem grob umrissenen Inhalt:
- Klassen, die ihre Dienste auf der Basis von Dateien und Verzeichnissen anbieten
- Klassen, die den Datentransport beschreiben
- Ausnahmeklassen
Speziellere Aufgaben werden von den Klassen anderer Namensräume erledigt:
- System.IO.Compression bietet mit DeflateStream und GZipStream zwei Klassen zur Datenkomprimierung bzw. Datendekomprimierung.
- System.IO.IsolatedStorage stellt eine Art virtuelles Dateisystem zur Verfügung. Meist wird es zur Speicherung anwendungsbezogener temporärer Daten verwendet, zum Beispiel als Ersatz für eine temporäre Registry. Weniger vertrauenswürdiger Code kann auf die dort befindlichen Daten nicht zugreifen.
- System.IO.Ports stellt Klassen zur Implementierung von eigenen Streams zur Verfügung, die nicht auf das Dateisystem zugreifen wie zum Beispiel die serielle Schnittstelle.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.