Was ist der Zweck von StreamReader, wenn Stream.Read () existiert?

9

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.

    
Bagofsheep 25.12.2014, 15:19
quelle

3 Antworten

11

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.

    
usr 25.12.2014, 15:24
quelle
2

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.

    
Yuval Itzchakov 25.12.2014 15:24
quelle
1

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.

    
Iram 25.12.2014 15:27
quelle