Streams sind für mich irgendwie mysteriös. Ich weiß nicht, wann ich welchen Stream verwenden soll und wie ich sie verwenden soll. Kann mir jemand erklären, wie Streams verwendet werden?
Wenn ich das richtig verstehe, gibt es drei Stream-Typen:
stream
read stream
write stream
Ist das richtig? Und was ist zum Beispiel der Unterschied zwischen a Memorystream
und a FileStream
?
Stream
), der einige hilfreiche Methoden wie Lesen, Schreiben und Ändern der Position aufzeigt. Jetzt können Sie Klassen basierend auf ihrem Sicherungsspeicher (FileStream, MemoryStream) erstellen, dieStream
diese Funktionalität basierend auf dem jeweiligen Sicherungsspeicher erben und darauf aufbauen.Antworten:
Ein Stream ist ein Objekt, mit dem Daten übertragen werden. Es gibt eine generische Stream-Klasse
System.IO.Stream
, von der alle anderen Stream-Klassen in .NET abgeleitet sind. DieStream
Klasse befasst sich mit Bytes.Die konkreten Stream-Klassen werden verwendet, um mit anderen Datentypen als Bytes umzugehen. Beispielsweise:
FileStream
Klasse wird verwendet, wenn die externe Quelle eine Datei istMemoryStream
wird verwendet, um Daten im Speicher zu speichernSystem.Net.Sockets.NetworkStream
verarbeitet NetzwerkdatenReader / Writer-Streams wie
StreamReader
undStreamWriter
sind keine Streams - sie sind nicht abgeleitet vonSystem.IO.Stream
, sie sollen helfen, Daten von und zu streamen und zu lesen!quelle
Um andere Antworten hier ein wenig zu erweitern und einen Großteil des Beispielcodes zu erklären, über den Sie gepunktet sehen, lesen und schreiben Sie die meiste Zeit nicht direkt in einen Stream. Streams sind ein einfaches Mittel zum Übertragen von Daten.
Sie werden feststellen, dass die Funktionen zum Lesen und Schreiben alle byteorientiert sind, z. B. WriteByte (). Es gibt keine Funktionen für den Umgang mit Ganzzahlen, Zeichenfolgen usw. Dies macht den Stream sehr universell, aber weniger einfach zu bearbeiten, wenn Sie beispielsweise nur Text übertragen möchten.
.NET bietet jedoch Klassen, die zwischen nativen Typen und der Stream-Schnittstelle auf niedriger Ebene konvertieren und die Daten für Sie zum oder vom Stream übertragen. Einige bemerkenswerte solche Klassen sind:
Um diese zu verwenden, erwerben Sie zuerst Ihren Stream, erstellen dann eine der oben genannten Klassen und ordnen sie dem Stream zu. Z.B
StreamReader und StreamWriter konvertieren zwischen nativen Typen und ihren Zeichenfolgendarstellungen und übertragen dann die Zeichenfolgen als Bytes zum und vom Stream. So
schreibt "123" (drei Zeichen '1', '2', dann '3') in den Stream. Wenn Sie mit Textdateien (z. B. HTML) arbeiten, sind StreamReader und StreamWriter die Klassen, die Sie verwenden würden.
Wohingegen
schreibt vier Bytes, die den 32-Bit-Ganzzahlwert 123 (0x7B, 0x00, 0x00, 0x00) darstellen. Wenn Sie mit Binärdateien oder Netzwerkprotokollen arbeiten, können Sie BinaryReader und BinaryWriter verwenden. (Wenn Sie Daten mit Netzwerken oder anderen Systemen austauschen, müssen Sie auf Endianness achten , aber das ist ein anderer Beitrag.)
quelle
Streams eignen sich gut für den Umgang mit großen Datenmengen. Wenn es unpraktisch ist, alle Daten gleichzeitig in den Speicher zu laden, können Sie sie als Stream öffnen und mit kleinen Teilen davon arbeiten.
quelle
Stream ist nur eine Abstraktion (oder ein Wrapper) über einen
physical
Bytestrom. Dieserphysical
Stream heißt derbase stream
. So gibt es immer einen Basisstrom über die ein Stream Wrapper erstellt wird , und somit wird die Umhüllung nach dem Basisstrom - Typ namens dhFileStream
,MemoryStream
usw.Der Vorteil des Stream-Wrappers besteht darin, dass Sie eine einheitliche API erhalten, mit der Sie mit Streams aller zugrunde liegenden Typen
usb, file
usw. interagieren können .Warum sollten Sie Daten als Stream behandeln? Da Datenblöcke bei Bedarf geladen werden, können wir die Daten als Blöcke untersuchen / verarbeiten, anstatt die gesamten Daten in den Speicher zu laden. So gehen die meisten Programme mit großen Dateien um, z. B. zum Verschlüsseln einer Betriebssystem-Image-Datei.
quelle
Es gibt nur einen Grundtyp von
Stream
. Unter verschiedenen Umständen lösen einige Mitglieder beim Aufruf eine Ausnahme aus, da in diesem Zusammenhang die Operation nicht verfügbar war.Zum Beispiel
MemoryStream
ist a einfach eine Möglichkeit, Bytes in einen Speicherblock hinein und aus diesem heraus zu verschieben. Daher können Sie Read and Write darauf aufrufen.Auf der anderen Seite
FileStream
können Sie mit a aus einer Datei lesen oder schreiben (oder beides). Ob Sie tatsächlich lesen oder schreiben können, hängt davon ab, wie die Datei geöffnet wurde. Sie können nicht in eine Datei schreiben, wenn Sie sie nur für den Lesezugriff geöffnet haben.quelle
Ich würde zunächst die Streams auf MSDN nachlesen: http://msdn.microsoft.com/en-us/library/system.io.stream.aspx
Memorystream und FileStream sind Streams, die zum Arbeiten mit Rohspeicher bzw. Dateien verwendet werden ...
quelle
Ich würde diese verschiedenen Arten von Streams nicht nennen. Die Stream-Klasse verfügt über CanRead- und CanWrite-Eigenschaften, die angeben, ob der bestimmte Stream gelesen und beschrieben werden kann.
Der Hauptunterschied zwischen verschiedenen Stream-Klassen (wie MemoryStream und FileStream) ist der Sicherungsspeicher - aus dem die Daten gelesen oder in den sie geschrieben werden. Es ist irgendwie offensichtlich aus dem Namen. Ein MemoryStream speichert die Daten nur im Speicher, ein FileStream wird durch eine Datei auf der Festplatte gesichert, ein NetworkStream liest Daten aus dem Netzwerk und so weiter.
quelle