Was ist ein Stream genau?

8

Wenn mein Buch sagt: Ein Stream ist eine Folge von Zeichen gelesen oder geschrieben von einem Gerät, dann sagt mein Buch: die istream und die ostream -Typen repräsentieren Eingabe und Ausgabe Stream (was bedeutet es?) Wie genau funktionieren cout und cin ?

Ich bin keine Sprache native und ich kann nicht verstehen, wenn mein Buch sagt: Der Ausgabeoperator schreibt den gegebenen Wert auf die angegebene ostream .

    
Piero Borrelli 03.09.2014, 19:08
quelle

3 Antworten

9

Der Grundgedanke hinter der Metapher eines "Streams" ist, dass er Daten in einem Single-Pass -Modus bereitstellt oder konsumiert: zum Beispiel werden Daten für einen Eingabestrom genau erzeugt einmal . Sie können den Stream nach weiteren Daten fragen, und sobald der Stream Ihnen die Daten gegeben hat, werden Sie nie wieder dieselben Daten erhalten.

Um etwas Sinnvolles mit Streams zu machen, werden Sie in der Regel eine Art buffer (ein "stream buffer", wenn Sie so wollen) an den Stream anhängen, der einige speichert (normalerweise kleine) Datenmenge, die aus dem Datenstrom in einem Speicher mit wahlfreiem Zugriff, inspizierbar und verarbeitbar extrahiert wurde. (Es gibt ähnliche umgekehrte Ideen für Ausgabeströme.)

Gelegentlich ist es sinnvoll, Streams ohne Pufferung zu verarbeiten. Wenn Sie beispielsweise einen Eingabe- und einen Ausgabestream haben und Ganzzahlen aus der Eingabe lesen und den doppelten Wert jeder Ganzzahl in die Ausgabe schreiben, können Sie dies ohne Pufferung tun.

Wenn Sie also über Bereiche von Daten nachdenken, sind Streams Dinge, die Sie nur einmal und nie wieder durchlaufen können. Wenn Sie im Hinblick auf den Vorwärtsfortschritt denken, haben Streams eine andere Eigenschaft, nämlich dass sie blockieren : Ein Eingabestream kann blockieren, wenn er keine Daten hat, und ein Ausgabestream kann blockieren, wenn er es enthält Ich kann keine weiteren Daten akzeptieren. Auf diese Weise können Sie sich innerhalb der Programmlogik vorstellen, dass ein Eingabestrom immer Daten enthält, bis sein Ende erreicht ist, aber ein Programm, das darauf angewiesen ist, kann für einen beliebigen, unbegrenzten Wandtakt laufen Zeit.

    
Kerrek SB 03.09.2014 19:20
quelle
3

Sie können es in einfachen Worten als Datenfluss definieren, bei dem es sich um den Eingabefluss und den Ausgabefluss handeln kann. Man kann sich also den Fluss von Daten von einem Programm zu einer Datei oder umgekehrt vorstellen. Das folgende Bild kann Ihnen helfen, es besser zu verstehen:

Von MSDN

  

Der Stream ist das zentrale Konzept der Iostream-Klassen. Sie können   Stellen Sie sich ein Stream-Objekt als eine intelligente Datei vor, die als Quelle fungiert und   Ziel für Bytes. Die Eigenschaften eines Streams werden bestimmt durch   seine Klasse und durch angepasste Insertion und Extraktion Operatoren.

    
Rahul Tripathi 03.09.2014 19:11
quelle
1

Aus der Sicht der Sprache sind Streams nur Objekte mit einer bestimmten streamähnlichen Schnittstelle: Sie ermöglichen es Ihnen, Daten daraus zu extrahieren (ein Eingabestream) oder Daten hineinzuschieben (ein Ausgabestream). Eingabeströme erlauben keinen wahlfreien Zugriff (was auch immer das bedeuten mag) auf die Daten, die sie bereitstellen (was auch immer das sein mag).

Beachten Sie, dass dies eine reine Schnittstellenbeschreibung für eine Klasse ist, mehr nicht. Wo der Stream seine Daten von / bekommt, was er mit den Daten macht, die in ihn hineingeschoben werden, liegt ganz bei dem Stream. Ein Stream ist eine Abstraktion für das Empfangen / Senden von Daten.

Eine konkrete Implementierung eines Streams kann Daten aus einer Terminalanwendung lesen und dem Programm anzeigen ( cin ), eine andere kann Zeichen an die Terminalanwendung zurückgeben, wenn das Programm anfordert ( cout ), eine dritte kann Daten lesen / schreiben von / in eine Datei (die fstream s), eine vierte kann Daten lesen / schreiben von / in einen Speicherpuffer ( stringstream ), eine fünfte kann Daten von einer Zufallszahl "lesen" Generator und so weiter. Die Möglichkeiten sind zahlreich, ebenso wie die verschiedenen Implementierungen der Stream-Schnittstelle, die erstellt wurden.

Das ist die Schönheit der Abstraktion von Streams: Es ist eine sehr flexible Möglichkeit für ein Stück Code zu kommunizieren. Der Prozess muss nichts über die Quelle / das Ziel seiner Daten wissen, außer dass er Daten von / zu ihm lesen / schreiben kann.

    
cmaster 03.09.2014 19:41
quelle

Tags und Links