У меня есть класс, который по сути является оболочкой Stream для чтения / записи, но ожидается, что этим потоком будет управлять потребитель этого класса. Для простоты использования Я использую классы 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
}
}