Pregunta

Tengo curiosidad por esto. Me sorprende que el comportamiento de un StringBuilder sea funcionalmente (si no técnicamente) el mismo que un Stream: es un contenedor de datos al que se pueden agregar otros datos.

Nuevamente, solo curiosidad.

¿Fue útil?

Solución

Stream es una entrada y salida de datos binarios .

StringBuilder es un medio para construir datos de texto .

Más allá de eso, está el problema del estado: un StringBuilder solo tiene el valor actual, sin idea de " position " ;. Le permite acceder y mutar datos en cualquier lugar dentro de él. Una secuencia, por otro lado, es lógicamente una secuencia de datos potencialmente infinita, con un cursor en algún lugar en el medio para decir dónde debe llegar. Por lo general, solo lee / escribe hacia adelante, con Buscar / Posición para saltar a una parte específica del flujo de datos.

Intenta imaginar la implementación de Stream API con StringBuilder ... simplemente no encaja. Podrías ordenar de hacerlo, pero terminarías con StringReader y StringWriter, básicamente.

Otros consejos

StringBuilder tiene más que solo funciones Añadir. También tiene funciones de inserción que no son naturales para una secuencia. Use la clase StringWriter si desea una secuencia que envuelva un <=>.

Una secuencia normalmente se refiere a una fuente de entrada / salida externa (archivo, red). StringBuilder no tiene esa característica.

Porque no es realmente una transmisión. Es más un búfer que crece.

Si bien ambos pueden tener datos agregados, la funcionalidad en su conjunto es diferente.

Un flujo es para ingresar o emitir datos desde / hacia alguna fuente, no para construir algo. StringBuilder no necesita la funcionalidad que proporciona Stream, como Buffering, etc. para construir un recurso.

Por otro lado, encontrará las clases StringReader / Writer en System.IO. El StringWriter p. implementa TextWriter contra un StringBuilder subyacente .

Personalmente, nunca lo he usado, pero si tienes una rutina de escritura de archivos de texto, puedes hacer que funcione contra un TextWriter . Luego, en su prueba, en lugar de crear una instancia de un StreamWriter , crea una instancia de un StringWriter y luego puede verificar lo que está escrito mirando el StringBuilder subyacente.

Ahora estoy mareado ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top