2010-10-19 5 views
5

Ich habe eine Klasse, die einen Stream als Eingabe akzeptiert (im Konstruktor). Der Inhalt dieses Streams wird mit verschiedenen Methoden angezeigt.Wie kann ich einen Stream von einem Stream-Reader oder Stream-Writer trennen?

Allerdings möchte ich nicht, dass mein Objekt für das Schließen des Streams verantwortlich ist - das sollte die Verantwortung des Anrufers sein. Ich muss daher meinen StreamReader innerhalb meiner Klasse schließen, aber ich kann den zugrunde liegenden Stream nicht schließen.

Ist das möglich?

+0

Warum müssen Sie den StreamReader schließen? –

+0

@Martinho: Weil du das meiner Meinung nach tun solltest. –

Antwort

3

StreamReader s sind so konzipiert, dass sie den vollständigen und ausschließlichen Besitz des zugrunde liegenden Streams übernehmen.

Insbesondere wird die StreamReader willkürlich im Stream vorauslesen, um einen internen Puffer zu füllen. (Dieses Bit mich einmal)

Wenn Sie den Stream teilen müssen, sollten Sie wahrscheinlich überhaupt keine StreamReader verwenden.

+0

@SLacks: Generell teile ich den Streamreader überhaupt nicht. Der einzige Ort, den ich brauche, ist das Testen einer Klasse, die einen Mountpunkt darstellt. –

4

Durch das Schließen des Streamreaders wird der zugrunde liegende Stream geschlossen. Es gibt keinen Weg dahin. Der nur Grund, warum Sie einen Streamreader schließen müssen, ist, so dass der zugrunde liegende Stream auch geschlossen ist. Der Rest ist alles gemanagter Code. Das bedeutet, Sie können Ihren Streamreader einfach abbrechen und alles sollte in Ordnung sein. — vorausgesetzt, Ihr Anrufer erinnert sich daran, seinen Stream zu schließen, wie sie sollten.

+0

Ich dachte, der Finalizer des Stream Reader/Writer den Stream geschlossen ... –

+0

@Billy: Finalizer sollten nur _native_ Ressourcen verfügen. – SLaks

+1

@SLaks: Nun, ich habe nicht die StreamReader-Klasse geschrieben .... –

Verwandte Themen