Por que não é a classe StringBuilder herdado do Stream?
-
20-08-2019 - |
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.
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 ...