FileStream vs / diferencias StreamWriter?

85

Pregunta:

¿Qué es diferente entre FileStreamy StreamWriteren .Net ?

¿Qué contexto se supone que debes usar? ¿Cuál es su ventaja y desventaja?

¿Es posible combinar estos dos en uno?

Qué pasa
fuente

Respuestas:

98

¿Qué es diferente entre FileStream y StreamWriter en dotnet?

A FileStreames a Stream. Como todos los Streams, solo se ocupa de byte[]datos.

A StreamWriter : TextWriter, es un decorador de Stream. Un TextWriter codifica datos de texto como cadenas o caracteres byte[]y luego los escribe en el enlace Stream.

¿Qué contexto se supone que debes usar? ¿Cuál es su ventaja y desventaja?

Utiliza un FileStream desnudo cuando tiene byte[]datos. Agrega un StreamWritercuando desea escribir texto. Utilice un formateador o un serializador para escribir datos más complejos.

¿Es posible combinar estos dos en uno?

Si. Siempre necesitas un Stream para crear un StreamWriter. El método auxiliar System.IO.File.CreateText("path")los creará en combinación y luego solo tendrá que Dispose () el escritor externo.

Henk Holterman
fuente
4
También es importante tener en cuenta que FileStreames un tipo de flujo, que se adapta específicamente a los archivos. Los flujos funcionan de forma nativa con bytes, sin embargo StreamWriter/ Reader escribirá / leerá texto en cualquier flujo, no solo en FileStreams. Por ejemplo, MemoryStreams, NetworkStreams, etc ..
iliketocode
19

FileStream escribe bytes, StreamWriter escribe texto. Eso es todo.

Hans Passant
fuente
14
En realidad, eso no es "todo" ... Pero es una diferencia correcta.
David
14

Un FileStream está diseñado explícitamente para archivos de trabajo.

Un StreamWriter se puede utilizar para transmitir a cualquier tipo de Stream : sockets de red, archivos, etc.

ScottGu explica muy bien los diferentes objetos Stream aquí: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223

David
fuente
1
Excelente referencia para transmisiones, aunque no cubre transmisiones R / W de acceso aleatorio. Especialmente la información de serialización / deserialización y la demostración de flujos que no son archivos son muy útiles. +1
ThunderGr
7

Bueno, de MSDN para FileStream:

Expone una secuencia alrededor de un archivo, que admite operaciones de lectura y escritura tanto síncronas como asincrónicas.

y el MSDN para StreamWriter:

Implementa un TextWriter para escribir caracteres en una secuencia en una codificación particular.

La diferencia más obvia es que FileStreampermite operaciones de lectura / escritura, mientras que StreamWriteres solo escritura.

La StreamWriterpágina continúa para agregar:

StreamWriter está diseñado para la salida de caracteres en una codificación particular, mientras que las clases derivadas de Stream están diseñadas para la entrada y salida de bytes.

Entonces, una segunda diferencia es que FileStreames para bytes, mientras que StreamWriteres para texto.

ChrisF
fuente
6

Son dos niveles diferentes que se utilizan para enviar información a fuentes de datos conocidas.

A FileStreames un tipo de Stream, que es conceptualmente un mecanismo que apunta a una ubicación y puede manejar datos entrantes y / o salientes hacia y desde esa ubicación. Los flujos existen para leer / escribir en archivos, conexiones de red, memoria, tuberías, la consola, oyentes de depuración y seguimiento, y algunos otros tipos de fuentes de datos. Específicamente, FileStreamexiste para realizar lecturas y escrituras en el sistema de archivos. La mayoría de las transmisiones tienen un uso de bajo nivel y tratan los datos como bytes.

A StreamWriteres un contenedor para una secuencia que simplifica el uso de esa secuencia para generar texto sin formato. Expone métodos que toman cadenas en lugar de bytes y realiza las conversiones necesarias hacia y desde matrices de bytes. Hay otros escritores; el otro principal que usaría es el XmlTextWriter, que facilita la escritura de datos en formato XML . También hay contrapartes de Reader para Writers que envuelven un Stream de manera similar y facilitan la recuperación de los datos.

KeithS
fuente
0

Una diferencia clave (además de los comentarios anteriores), podría ser que FileStream admite lectura y escritura de acceso aleatorio al disco en cualquier FileStream.Position especificado. Para modificaciones de archivos grandes, eso puede ser invaluable.

beanmf
fuente