Domanda

Sono solo curioso di questo. Mi sembra che il comportamento di StringBuilder sia funzionalmente (se non tecnicamente) lo stesso di uno Stream: è un cestino di dati a cui è possibile aggiungere altri dati.

Ancora una volta, solo curioso.

È stato utile?

Soluzione

Stream è un input e output di dati binari .

StringBuilder è il mezzo per creare testo dati

Oltre a ciò, c'è il problema dello stato: StringBuilder ha solo il valore corrente, senza idea di " position " ;. Ti consente di accedere e mutare i dati ovunque all'interno di esso. Un flusso, d'altra parte, è logicamente un flusso potenzialmente infinito di dati, con un cursore da qualche parte nel mezzo per dire dove devi arrivare. In genere basta leggere / scrivere in avanti, con Cerca / Posizione per passare a una parte specifica del flusso di dati.

Prova a immaginare di implementare l'API Stream con StringBuilder ... semplicemente non si adatta. Potresti ordinare di farlo, ma finiresti con StringReader e StringWriter, in pratica.

Altri suggerimenti

StringBuilder ha più di una semplice funzione di aggiunta. Ha anche funzioni di inserimento che sono innaturali per un flusso. Utilizzare la classe StringWriter se si desidera uno stream che racchiuda un <=>.

Un flusso normalmente si riferisce a una fonte di input / output esterna (file, rete). StringBuilder non ha questa caratteristica.

Perché non è proprio uno stream. È più un buffer che cresce.

Sebbene sia possibile aggiungere ad entrambi i dati, la funzionalità nel suo insieme è diversa.

Uno Stream serve per immettere o inviare dati da / verso una fonte, non per creare qualcosa. StringBuilder non ha bisogno delle funzionalità fornite da Stream, come Buffering, ecc. Per creare una risorsa.

D'altra parte troverai le classi StringReader / Writer in System.IO. Il StringWriter ad es. implementa TextWriter su un StringBuilder .

Personalmente non l'ho mai usato ma se hai una routine di scrittura di file di testo potresti farlo funzionare contro un TextWriter . Quindi nel test, invece di creare un'istanza di StreamWriter , crea un'istanza di StringWriter e puoi quindi controllare ciò che è stato scritto guardando il StringBuilder sottostante.

Ora ho le vertigini ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top