Das hat mich nervt. Ich weiß, dass Stream eine abstrakte Klasse ist und daher nicht instanziiert werden kann, aber Klassen, die davon abgeleitet sind. Warum gibt es eine StreamReader -Klasse und eine Stream.Read () -Methode (und umgekehrt für StreamWriter und Stream.Write () )? Sie können mit 3 Millionen verschiedenen Methoden in eine Textdatei schreiben, und es ist ziemlich frustrierend, wenn Sie versuchen, alle diese verschiedenen Typen und Methoden im System.IO -Namespace kennen zu lernen. Ich habe Fragen und Antworten zu den Unterschieden zwischen den Writer- und Reader-Objekten oder den abgeleiteten Stream-Objekten selbst gefunden, aber nichts in Bezug auf diesen speziellen Fall.
TextReader
(woraus StreamReader
abgeleitet ist) funktioniert mit Strings. Stream
arbeitet mit Bytes. Die Konvertierung zwischen Text und Bytes erfolgt durch Encoding
.
Wählen Sie die richtige Klasse basierend darauf, ob der Inhalt Ihrer Datei Text oder Binärdatei ist.
Es ist wichtig, den Unterschied zwischen Text und Byte zu verstehen.
A StreamReader
ist ein TextReader
was bedeutet, dass es ein Stream
Wrapper ist. A TextReader
konvertiert (oder codiert) Textdaten (string oder char) in Byte [] und schreibt sie in das zugrunde liegende Stream
.
Wenn Sie sich den Unterschied zwischen den beiden Implementierungen ansehen, können Sie sehen, dass StreamReader
von TextReader
abgeleitet ist, was, wie deklariert, mit Text statt mit Bytes zu tun hat. Es scheint mir eine Abstraktion für Benutzer zu sein, die mit Textdarstellung arbeiten wollen. Natürlich benötigt die zugrundeliegende Implementierung ein Stream
, um solche Daten zu konsumieren, bietet aber eine Abstraktionsebene für Endbenutzer.
Diese beiden Fälle werden in verschiedenen Szenarien verwendet
Wenn Sie die Stream-Klasse verwenden, können Sie auf die Datei zum Lesen und Schreiben zugreifen. Wenn Sie jedoch die streamreader-Klasse verwenden, können Sie sie nur zum Lesen verwenden. Dies verhindert die Verwendung der zu schreibenden Datei. Manchmal Diese Klasse wird aus Sicherheitsgründen verwendet. z.B. für Systemdateien, die nur gelesen werden.
Tags und Links c# stream io streamwriter streamreader