我有一个类,它本质上包装了一个用于读/写的Stream,但该流应该由该类的使用者管理。为了便于使用,我使用StreamReader和StreamWriter类在流上执行I/O操作。通常我会将读取器和写入器包装在using
块中,但我希望避免关闭读取器和写入器,因为这样做也会关闭底层流,而我必须保持它的打开状态。
如果我希望底层的Stream由调用者管理,那么不关闭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
}
}
发布于 2010-12-17 07:54:02
解决此问题的最简单方法是将流包装在您自己的类中,该类派生自System.IO.Stream
示例:http://csharptest.net/browse/src/Library/IO/NonClosingStream.cs
发布于 2010-12-17 06:18:17
https://stackoverflow.com/questions/4465824
复制相似问题