Questão:
O que é diferente entre FileStream
e StreamWriter
em .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 StreamWriter
quando 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 FileStream
permite operações de leitura / gravação, enquanto StreamWriter
é somente gravação.
A StreamWriter
pá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 é FileStream
para 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, FileStream
existe 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 apenasFileStream
s. Por exemplo,MemoryStreams
,NetworkStreams
, etc ..