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?

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.


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.


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


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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.