2010-10-19 22 views
5

Tengo una clase que acepta una secuencia como entrada (en el constructor). Muestra contenido de esta secuencia a través de varios métodos.¿Cómo puedo separar una secuencia de un lector de flujo o un escritor de flujo?

Sin embargo, no quiero que mi objeto sea el responsable de cerrar la transmisión, eso debería ser responsabilidad de la persona que llama. Por lo tanto, necesito cerrar mi StreamReader dentro de mi clase, pero no puedo cerrar la transmisión subyacente.

¿Esto es posible?

+0

¿Por qué necesita cerrar el StreamReader? –

+0

@Martinho: Porque a mi entender eso es lo que se supone que debes hacer. –

Respuesta

3

StreamReader s están diseñadas para tomar posesión completa y única de la transmisión subyacente.

En particular, el StreamReader leerá arbitrariamente adelante en la secuencia para llenar un búfer interno. (Esto me mordió una vez)

Si necesita compartir la secuencia, probablemente no debería usar un StreamReader en absoluto.

+0

@SLacks: en general, no comparto el streamreader en absoluto. El único lugar donde necesito esto es para probar en una clase una clase que represente un punto de montaje. –

4

Al cerrar el autorradio, se cerrará la transmisión subyacente. No hay forma de evitar eso. Sin embargo, el motivo solo que necesita para cerrar un autor de secuencias es para que la transmisión subyacente también se cierre. El resto es todo código administrado. Eso significa que puede abandonar su lector de flujo y todo debe estar bien — suponiendo que la persona que llama recuerda cerrar la transmisión como debería.

+0

Pensé que el finalizador del lector/escritor de la secuencia cerró la secuencia ... –

+0

@Billy: los finalizadores solo deberían eliminar _native_ resources. – SLaks

+1

@SLaks: Bueno, no escribí la clase StreamReader .... –

Cuestiones relacionadas