Questão:
O que é diferente entre FileStreame StreamWriterem .Net ?
Em que contexto você deve usá-lo? Qual é a sua vantagem e desvantagem?
É possível combinar esses dois em um?
Respostas:
O que é diferente entre FileStream e StreamWriter no dotnet?
A FileStreamé a Stream. Como todos os Streams, ele lida apenas com byte[]dados.
A StreamWriter : TextWriter, é decorador de stream. Um TextWriter codifica dados de texto como string ou char byte[]e, em seguida, os grava no link Stream.
Em que contexto você deve usá-lo? Qual é a sua vantagem e desvantagem?
Você usa um FileStream vazio quando tem byte[]dados. Você adiciona um StreamWriterquando quiser escrever um texto. Use um formatador ou serializador para gravar dados mais complexos.
É possível combinar esses dois em um?
Sim. Você sempre precisa de um Stream para criar um StreamWriter. O método auxiliar System.IO.File.CreateText("path")irá criá-los em combinação e então você só precisa Dispose () o gravador externo.
FileStream grava bytes, StreamWriter grava texto. Isso é tudo.
Um FileStream se destina explicitamente a arquivos de trabalho.
Um StreamWriter pode ser usado para transmitir para qualquer tipo de Stream - sockets de rede, arquivos, etc.
ScottGu explica os diferentes objetos Stream muito bem aqui: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223
Bem, do MSDN para FileStream:
Expõe um fluxo em torno de um arquivo, suportando operações de leitura e gravação síncronas e assíncronas.
e o MSDN para StreamWriter:
Implementa um TextWriter para gravar caracteres em um fluxo em uma codificação específica.
A diferença mais óbvia é que FileStreampermite operações de leitura / gravação, enquanto StreamWriteré somente gravação.
A StreamWriterpágina continua para adicionar:
StreamWriter é projetado para saída de caracteres em uma codificação específica, enquanto classes derivadas de Stream são projetadas para entrada e saída de bytes.
Portanto, uma segunda diferença é FileStreampara bytes, enquanto StreamWriteré para texto.
Eles são dois níveis diferentes usados na saída de informações para fontes de dados conhecidas.
A FileStreamé um tipo de fluxo, que é conceitualmente um mecanismo que aponta para algum local e pode manipular dados de entrada e / ou saída de e para esse local. Streams existem para leitura / gravação em arquivos, conexões de rede, memória, canais, o console, ouvintes de depuração e rastreamento e alguns outros tipos de fontes de dados. Especificamente, FileStreamexiste um para executar leituras e gravações no sistema de arquivos. A maioria dos fluxos é de baixo nível de uso e trata os dados como bytes.
A StreamWriteré um wrapper para um Stream que simplifica o uso desse stream para gerar texto simples. Ele expõe métodos que pegam strings em vez de bytes e executa as conversões necessárias de e para matrizes de bytes. Existem outros escritores; o outro principal que você usaria é o XmlTextWriter, que facilita a gravação de dados no formato XML . Existem também contrapartes do Reader para os gravadores que também envolvem um fluxo e facilitam a recuperação dos dados.
FileStreamé um tipo de fluxo, que é especificamente adaptado para arquivos. Streams nativamente funcionam com bytes, no entantoStreamWriter/ Reader irá escrever / ler texto em qualquer stream, não apenasFileStreams. Por exemplo,MemoryStreams,NetworkStreams, etc ..