IO 101: Welches sind die wichtigsten Unterschiede zwischen Textwriter, Filestream und Streamwriter sind?

StackOverflow https://stackoverflow.com/questions/1010555

  •  06-07-2019
  •  | 
  •  

Frage

Lassen Sie mich zunächst entschuldigen, wenn diese Frage Art vielleicht klingen könnte von dilettantisch für den erfahrenen Programmierer unter euch, die Sache ist, ich habe bei der Arbeit über diese viele Argumente wurden, so ich diese gerade bekommen möchte wirklich, und das ist im Grunde, warum ich ‚auf der Stackoverflow Gemeinschaft m unter Berufung einmal zu bekommen diese angesiedelt und für alle:)

Also, auf der einen Seite nach MSDN, die wir haben:

  

Textwriter Klasse

     

Stellt einen Schriftsteller, der ein schreiben   sequentielle Reihe von Zeichen. Diese   Klasse ist abstrakt.

     

Filestream-Klasse

     

legt einen Strom um eine Datei,   Unterstützung sowohl synchrone und   asynchrone Lese- und Schreib   Operationen.

     

Stream Klasse

     

Implementiert eine Textwriter zum Schreiben   Zeichen zu einem Strom in einem bestimmten   Codierung.

Auf der anderen Seite ist es offensichtlich, sie alle zu System.IO gehören aber da MSDN Beispiele Art von einigen von ihnen mischen, ich bin noch nicht viel erreicht a-ha Moment gewünscht wird.

Jeder Kommentar wäre mehr als dankbar, danke viel im Voraus!

War es hilfreich?

Lösung

Streams Griff Bytes , Autoren behandeln Zeichen .

Bytes! = Zeichen. Ein Zeichen kann mehr als ein Byte, um zu repräsentieren. Die Zuordnung von Zeichen zu Zeichen ist eine Codierung genannt.

A FileStream bezieht sich auf das Bytes in eine Datei geschrieben werden, ähnlich wie ein MemoryStream zu dem Bytes bezieht sich auf einen In-Memory-Puffer geschrieben. Um Zeichen in einen Stream zu schreiben, müssen Sie sie auf eine Reihe von Bytes konvertieren. Das ist, wo ein StreamWriter kommt zu spielen. Es dauert eine Folge von Zeichen und eine Codierung und verwandelt es in eine Folge von Bytes.

Eine TextWriter ist eine Schnittstelle (na ja, abstrakte Basisklasse), dass alle der Verfasser haften müssen. Es verfügt über alle Operationen basierend auf Zeichen. Das Äquivalent für Bytes ist die Stream abstrakte Basisklasse.

Dinge auch in der entgegengesetzten Richtung gehen. Es gibt eine TextReader abstrakte Basisklasse, die beschreibt, wie Zeichen von irgendwo zu lesen, und ein StreamReader, die Sie Zeichen aus einem byteorientierte Strom liefert eine Codierung lesen kann - aber dieses Mal verwendet in umgekehrter Richtung, aggregieren alle Multi-Byte-Sequenzen in einzelne Zeichen gegebenenfalls.

Ein Stream kann sowohl für das Lesen und Schreiben verwendet werden, da Bytes die untersten Ebene Elemente verwendet in I / O-Operationen sind.

Andere Tipps

Ich habe immer das Beste, was zu tun ist, schauen Sie sich, welche Methoden sie bieten und wie Sie sie bauen. Dies ist fast immer die wichtigste, wenn nicht nur, was mir wichtig ist, wenn eine API. Wie baue ich es und was kann es?

Sie können keine Textwriter instanziiert. Es ist abstrakt. Das sagt mir, der einzige wirkliche Zweck dient es, nun ja, Abstraktion. Wenn Sie eine Funktion schreiben, die jede Art von Schriftsteller als Argument übernimmt, gibt es eine gute Chance, sollten Sie nur Textwriter nehmen vielseitiger zu sein.

Ein Stream können Sie instanziieren, und es tut genau das, was es sagt, es Ströme schreibt. Das heißt, es wird ein Strom brauchen eine wirkliche Schreiben getan. Sobald Sie diesen Strom obwohl haben, können Sie alle Arten von nette Dinge tun wie eine ganze Reihe auf einmal zu schreiben, anstelle von individuellen Zeichen zu umgehen (oder Bytes eher), wie Sie es direkt auf den Strom.

Also im Grunde erhalten Sie einen Stream, so dass Sie es zu einem Stream füttern können (oder Reader). Wenn du einen Text schreiben, wahrscheinlich wollen Sie nicht direkt mit einem Strom arbeiten, nicht mehr als Sie anstelle einer Zeichenfolge mit einem Zeichen-Array arbeiten möchten.

Filestreams können bequem direkt aus der Datei und Fileinfo Klassen instanziiert werden, und in meiner Nutzung, das ist, wie sie in der Regel instanziiert sind. Holen Sie sich eine Datei (Ich mag Fileinfo verwenden) und rufen Sie Openwrite (). Gibt sie an einen Streamwriter (die nur eine Art von Textwriter ist) und du bist auf dem Weg.

Zur Verallgemeinerung: Wenn Sie eine Klasse, um herauszufinden, versuchen Sie schauen, wie Sie es instanziiert und was sie tun können. Dies löscht in der Regel eine Menge auf.

Es gibt einen offensichtlichen Unterschied zwischen einem "Stream" und ein "Writer / Reader".

Ein Strom ist eine Byte-Ebene Darstellung und ist wirklich ein abstraktes Konzept, das in einer Vielzahl von Arten implementiert werden kann. Zum Beispiel haben Sie eine Filestream und einen Memorystream. Sowohl das ist Strom von Bytes, aber sie sind anders gelagert.

Autoren und Leser geben Ihnen eine Möglichkeit, Ströme zu verarbeiten, das Hinzufügen und von ihnen das Extrahieren von Daten.

Für Ihre speziellen Beispielen ist Textwriter eine abstrakte Klasse, die Zeichen in einen Stream schreibt sequentiell. Es hat mehrere Implementierungen (Stream, String), die in unterschiedlichen Kontexten nützlich Sie sind. Sie würden verwenden je nachdem, welchen Sinn zu der Zeit macht. jedoch für mehrere APIs, alles, was benötigt wird, ist ein Textwriter, oder etwas rufen „Schreiben“ oder „Writeline“ auf. Es ist nicht ein Anliegen dieser APIs, wenn Ihr Schreiber verwendet wird, Sachen in einen String zu setzen, ein beliebigen Speicher oder eine Datei.

Die Filestream Klasse verwaltet bekommen einen Griff in eine Datei und sie zum Lesen oder Schreiben und anderen Dateisystem-Funktionen zu öffnen. Binary schreibt binäre Daten in einen Stream und Stream schreibt Zeichendaten in einem Stream. Beide können ein Filestream-Objekt verwenden, um binäre oder Zeichendaten in Dateien zu schreiben.

Textwriter ist die Basisklasse, die Stream erbt von. Ein Textwriter soll eine Art nehmen und Ausgabe einer Zeichenfolge seiner schreiben . Stream Implementierung der TextWriter.Write Methode schreibt einen String oder Zeichendaten in ein Stream. Binary nicht erben Textwriter, weil es nicht Zeichendaten in einen Stream schreibt.

Stream ist eine abstrakte Basisklasse, die eine Reihe von Bytes darstellt.

  • MemoryStream ist ein Strom von Bytes im Speicher gehalten, unterstützt von einem Array.

  • FileStream ist ein Strom von Bytes in einer Datei, in der Regel durch eine Datei-Handelte irgendwo auf der Festplatte gesichert.

Textzeichen werden sich von Bytes, und ein einzelnes Zeichen können mehrere Bytes, auf die Codierung abhängig. Es gibt einige Standard-Klassen, den Text in verschiedenen Quellen lesen und schreiben eine bestimmte Codierung.

TextWriter ist eine abstrakte Basisklasse für zu einem Zieltextzeichen zu schreiben.

  • StreamWriter schreibt Textzeichen (umgerechnet in Bytes) in einen Strom von Bytes.
  • StringWriter schreibt Textzeichen in eine Zeichenfolge (über einen String).

TextReader ist eine abstrakte Basisklasse für Textzeichen aus einer Quelle zu lesen.

  • StreamReader liest Textzeichen (von Bytes umgewandelt) aus einem Strom von Bytes.
  • StringReader liest Textzeichen aus einem String.

Stream, TextWriter, TextReader sind alle abstrakten Basisklassen, so dass sie nie direkt verwendet werden, sondern durch eine Implementierung wie die, die oben beschrieben wurden. Allerdings werden Sie die Basisklassen in Methodendefinitionen sehen, so dass verschiedene Implementierungen verwendet werden können, einschließlich Ihrer eigenen benutzerdefinierten diese bei Bedarf. Abstrakte Klassen sind ähnlich Schnittstellen kann aber definieren tatsächlich die Logik für die Methoden, die ohne jede Implementierung wiederverwendet werden können die gleichen grundlegenden Code zu wiederholen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top