FileStream vs / Unterschiede StreamWriter?

85

Frage:

Was ist anders zwischen FileStreamund StreamWriterin .Net ?

Welchen Kontext solltest du verwenden? Was ist ihr Vor- und Nachteil?

Ist es möglich, diese beiden zu einem zu kombinieren?

Was geht
quelle

Antworten:

98

Was unterscheidet FileStream und StreamWriter in dotnet?

A FileStreamist a Stream. Wie bei allen Streams werden nur byte[]Daten behandelt.

A StreamWriter : TextWriter, ist ein Stream-Dekorateur. Ein TextWriter codiert Textdaten wie Zeichenfolge oder Zeichen byte[]und schreibt sie dann in den verknüpften Text Stream.

Welchen Kontext solltest du verwenden? Was ist ihr Vor- und Nachteil?

Sie verwenden einen nackten FileStream, wenn Sie byte[]Daten haben. Sie fügen ein hinzu, StreamWriterwenn Sie Text schreiben möchten. Verwenden Sie einen Formatierer oder einen Serializer, um komplexere Daten zu schreiben.

Ist es möglich, diese beiden zu einem zu kombinieren?

Ja. Sie benötigen immer einen Stream, um einen StreamWriter zu erstellen. Die Hilfsmethode System.IO.File.CreateText("path")erstellt sie in Kombination, und dann müssen Sie nur noch den äußeren Writer entsorgen ().

Henk Holterman
quelle
4
Es ist auch wichtig zu beachten, dass FileStreames sich um eine Art Stream handelt, der speziell auf Dateien zugeschnitten ist. Streams arbeiten nativ mit Bytes, StreamWriter/ Reader schreibt / liest jedoch Text in jeden Stream, nicht nur in FileStreams. Zum Beispiel MemoryStreams, NetworkStreamsetc ..
iliketocode
19

FileStream schreibt Bytes, StreamWriter schreibt Text. Das ist alles.

Hans Passant
quelle
13
Eigentlich ist das nicht "alles" ... Aber es ist ein richtiger Unterschied.
David
14

Ein FileStream ist explizit für Arbeitsdateien vorgesehen.

Ein StreamWriter kann zum Streamen zu jedem Stream- Typ verwendet werden - Netzwerk-Sockets, Dateien usw.

ScottGu erklärt die verschiedenen Stream-Objekte hier sehr gut: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223

David
quelle
1
Hervorragende Referenz für Streams, obwohl sie keine R / W-Streams mit wahlfreiem Zugriff abdeckt. Insbesondere die Serialisierungs- / Deserialisierungsinformationen und die Demonstration von Nicht-Dateistreams sind sehr nützlich. +1
ThunderGr
7

Nun, aus dem MSDN für FileStream:

Macht einen Stream um eine Datei verfügbar und unterstützt sowohl synchrone als auch asynchrone Lese- und Schreibvorgänge.

und die MSDN für StreamWriter:

Implementiert einen TextWriter zum Schreiben von Zeichen in einen Stream in einer bestimmten Codierung.

Der offensichtlichste Unterschied besteht darin, FileStreamdass Lese- / Schreibvorgänge zulässig sind, während StreamWriternur geschrieben wird.

Die StreamWriterSeite fügt hinzu:

StreamWriter ist für die Zeichenausgabe in einer bestimmten Codierung ausgelegt, während von Stream abgeleitete Klassen für die Eingabe und Ausgabe von Bytes ausgelegt sind.

Ein zweiter Unterschied besteht also darin, dass FileStreames sich um Bytes handelt, während StreamWriteres sich um Text handelt.

ChrisF
quelle
6

Dies sind zwei verschiedene Ebenen, die bei der Ausgabe von Informationen an bekannte Datenquellen verwendet werden.

A FileStreamist eine Art Stream, bei dem es sich konzeptionell um einen Mechanismus handelt, der auf einen bestimmten Ort verweist und eingehende und / oder ausgehende Daten von und zu diesem Ort verarbeiten kann. Es gibt Streams zum Lesen / Schreiben in Dateien, Netzwerkverbindungen, Speicher, Pipes, die Konsole, Debug- und Trace-Listener und einige andere Arten von Datenquellen. Insbesondere aFileStream vorhanden, um Lese- und Schreibvorgänge in das Dateisystem durchzuführen. Die meisten Streams verwenden nur sehr wenig und verarbeiten Daten als Bytes.

A StreamWriterist ein Wrapper für einen Stream, der die Verwendung dieses Streams zur Ausgabe von einfachem Text vereinfacht. Es macht Methoden verfügbar, die Zeichenfolgen anstelle von Bytes verwenden, und führt die erforderlichen Konvertierungen in und von Bytearrays durch. Es gibt andere Schriftsteller; Das andere Hauptelement XmlTextWriter, das Sie verwenden würden, ist das , das das Schreiben von Daten im XML- Format erleichtert . Es gibt auch Reader-Gegenstücke zu den Writern, die einen Stream auf ähnliche Weise umschließen und das Zurückholen der Daten erleichtern.

KeithS
quelle
0

Ein wesentlicher Unterschied (zusätzlich zu den obigen Kommentaren) könnte sein, dass FileStream das zufällige Lesen und Schreiben von Datenträgern auf eine beliebige angegebene FileStream.Position unterstützt. Bei großen Dateimodifikationen kann dies von unschätzbarem Wert sein.

beanmf
quelle