Der Grundgedanke hinter der Metapher eines „Stream“ ist, dass es bereitstellt oder verbraucht Daten in einer Single-Pass- Mode: zum Beispiel für einen Eingangsstrom, Daten genau einmal erzeugt werden. Sie können den Stream nach weiteren Daten fragen, und sobald der Stream Ihnen die Daten gegeben hat, werden Sie nie wieder die gleichen Daten erhalten.
Aus diesem Grund, um etwas Sinnvolles mit Strömen zu tun, werden Sie sehr in der Regel eine Art Puffer anhängen möchten (ein „Strompuffer“, wenn man so will) mit dem Strom, der einige (meist kleine) speichert Datenmenge, die aus dem Stream in einem Speicher mit wahlfreiem Zugriff, inspizierbar und verarbeitbar extrahiert wurde. (Es gibt ähnliche umgekehrte Ideen für Ausgabeströme.)
Gelegentlich ist es sinnvoll, Ströme 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.
Also wenn Sie über Bereiche von Daten denken, sind Streams Dinge, die Sie nur einmal und nie wieder durchlaufen können. Wenn Sie in Bezug auf Forward-Fortschritt denken, dann haben Streams eine andere Eigenschaft, die sie blockieren können: ein Eingabestream kann blockieren, wenn es keine Daten hat, und ein Ausgabestream kann blockieren, wenn es keine weiteren Daten akzeptieren kann . 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 eine beliebige, unbegrenzte Wanduhrzeit laufen.
Dämpfe können bidirektional oder unidirektional sein. Das ist alles –
erhalten Sie einen guten Überblick über die Stream-Klassen hier: http://www.cplusplus.com/reference/iolibrary/ – BeyelerStudios