我有一個類基本上包裝流讀取/寫入,但該流預計由該類的消費者管理。爲了便於使用,我使用StreamReader和StreamWriter類對流進行I/O操作。通常情況下,我會將讀寫器封裝在using
塊中,但我想避免關閉讀寫器,因爲這樣做也會關閉底層流,並且必須保持打開狀態。是否可以不關閉StreamReader/StreamWriter以保持底層流的打開?
是在內存/資源管理等方面的安全,不能關上一個StreamReader/StreamWriter的,如果我希望底層流被調用者進行管理?當流在其他地方顯式關閉時,讀者和作者是否會被垃圾收集?
public class Wrapper
{
private Stream _underlyingStream;
public Wrapper(Stream underlyingStream)
{
_underlyingStream = underlyingStream;
}
public string GetValue()
{
_underlyingStream.Seek(0, SeekOrigin.Begin);
var reader = new StreamReader(_underlyingStream);
return reader.ReadToEnd(); // we're done, but the stream is not ours to close
}
}
這個問題可能會有所幫助:http://stackoverflow.com /問題/ 1862261 /可任您保持-A-的StreamReader - 從配置用最底層的流 – 2010-12-16 22:09:44
不相關的問題,但因爲包裝不「擁有」流,你可能想也節省了原始'_underlyingStream.Position'並在返回給調用者之前將其恢復到ReadToEnd()之後的那個位置。 (雖然,您的使用可能會使呼叫者期望此位置受到此類呼叫的影響 - 並且如果它很重要,可以自行保存位置。) – 2016-03-22 22:49:16