Frage:
Was ist anders zwischen FileStream
und StreamWriter
in .Net ?
Welchen Kontext solltest du verwenden? Was ist ihr Vor- und Nachteil?
Ist es möglich, diese beiden zu einem zu kombinieren?
Antworten:
Was unterscheidet FileStream und StreamWriter in dotnet?
A FileStream
ist 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, StreamWriter
wenn 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 ().
FileStream schreibt Bytes, StreamWriter schreibt Text. Das ist alles.
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
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, FileStream
dass Lese- / Schreibvorgänge zulässig sind, während StreamWriter
nur geschrieben wird.
Die StreamWriter
Seite 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 FileStream
es sich um Bytes handelt, während StreamWriter
es sich um Text handelt.
Dies sind zwei verschiedene Ebenen, die bei der Ausgabe von Informationen an bekannte Datenquellen verwendet werden.
A FileStream
ist 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 StreamWriter
ist 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.
FileStream
es 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 inFileStream
s. Zum BeispielMemoryStreams
,NetworkStreams
etc ..