Pregunta:
¿Qué es diferente entre FileStream
y StreamWriter
en .Net ?
¿Qué contexto se supone que debes usar? ¿Cuál es su ventaja y desventaja?
¿Es posible combinar estos dos en uno?
Respuestas:
¿Qué es diferente entre FileStream y StreamWriter en dotnet?
A FileStream
es 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 StreamWriter
cuando 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.
FileStream escribe bytes, StreamWriter escribe texto. Eso es todo.
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
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 FileStream
permite operaciones de lectura / escritura, mientras que StreamWriter
es solo escritura.
La StreamWriter
pá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 FileStream
es para bytes, mientras que StreamWriter
es para texto.
Son dos niveles diferentes que se utilizan para enviar información a fuentes de datos conocidas.
A FileStream
es 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, FileStream
existe 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 StreamWriter
es 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.
FileStream
es un tipo de flujo, que se adapta específicamente a los archivos. Los flujos funcionan de forma nativa con bytes, sin embargoStreamWriter
/ Reader escribirá / leerá texto en cualquier flujo, no solo enFileStream
s. Por ejemplo,MemoryStreams
,NetworkStreams
, etc ..