Pergunta

Eu sou apenas curioso sobre isso. Parece-me que o comportamento de um StringBuilder é funcionalmente (se não tecnicamente) o mesmo que um Stream -. É uma bin de dados ao qual podem ser adicionados outros dados

Mais uma vez, apenas curioso.

Foi útil?

Solução

Stream é um entrada e saída de binário de dados.

StringBuilder é meio da construção de texto de dados.

Além disso, há a questão de Estado - um StringBuilder tem apenas o valor atual, sem nenhuma idéia de "posição". Ele permite que você acesso e em qualquer lugar dados mutação dentro dele. Um fluxo, por outro lado, é logicamente um fluxo potencialmente infinito de dados, com um algum lugar cursor no meio para dizer onde você tem que. Você geralmente apenas de leitura / gravação para a frente, com SEEK / Posição para pular para uma parte específica do fluxo de dados.

Tente imaginar a implementação da API Stream com StringBuilder ... ele apenas não se encaixa. Você poderia tipo de fazê-lo, mas você pode acabar com StringReader e StringWriter, basicamente.

Outras dicas

StringBuilder tem mais de apenas funções de acréscimo. Ele também tem funções de inserção que não é natural para um fluxo. Use a classe StringWriter se você quiser um fluxo que envolve um StringBuilder.

Uma corrente normalmente refere-se a uma fonte externa de entrada / saída (arquivo, rede). StringBuilder não tem essa característica.

Porque não é realmente um córrego. É mais de um buffer que cresce.

Enquanto ambos podem ter dados adicionados a eles, a funcionalidade como um todo é diferente.

A Stream é para entrada ou saída de dados de / para alguma fonte, não para construir algo. não StringBuilder não precisa de funcionalidade que a Stream fornece, como buffer, etc para construir um recurso.

Por outro lado, você vai encontrar as classes StringReader / Escritor em System.IO. O StringWriter por exemplo implementos TextWriter contra um subjacente StringBuilder .

Pessoalmente eu nunca usei, mas se você tem uma rotina de escrita arquivo de texto que você poderia fazê-lo funcionar contra um TextWriter . Então, em seu teste, em vez de instanciar um StreamWriter você instanciar um StringWriter e você poderia, então, verificar o que foi escrito por olhando para o subjacente StringBuilder .

Agora estou tonto ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top