首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可以不关闭StreamReader/StreamWriter来保持底层流打开吗?

可以不关闭StreamReader/StreamWriter来保持底层流打开吗?
EN

Stack Overflow用户
提问于 2010-12-17 06:06:03
回答 2查看 6.5K关注 0票数 18

我有一个类,它本质上包装了一个用于读/写的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
    }
}
EN

回答 2

Stack Overflow用户

发布于 2010-12-17 07:54:02

解决此问题的最简单方法是将流包装在您自己的类中,该类派生自System.IO.Stream

示例:http://csharptest.net/browse/src/Library/IO/NonClosingStream.cs

票数 1
EN

Stack Overflow用户

发布于 2010-12-17 06:18:17

这是绝对不好的。read this from msdn

close调用Dispose方法,传递一个true值。除非显式调用Close,否则刷新流不会刷新其基础编码器。

尝试将所有IO封装在一个类中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4465824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档