如果我得到一个MemoryStream我知道已经填充了一个String,我怎么得到String退出?
我有一个基本上包装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
}
}
Run Code Online (Sandbox Code Playgroud)