c# - 将流包装在流中 - 包装后的流会被正确处理吗?

标签 c# stream dispose word-wrap

我不知道如何检查,例如:

using (var stream = new StreamWriter(someStream))
{
    stream.Write("");
}

这会像这样吗:

using (var stream1 = someStream)
{
    using (var stream2 = new StreamWriter(stream1))
         stream.Write("");
}

或者如果我将其包装到 GZipStream 或任何其他流中...第一个示例会处理每个底层流吗?

更新:

最后它击中了我 - 我自己实现了 Stream 类:

class MyStream : Stream
{
    // fake stream implementation

    protected override void Dispose(bool disposing)
    {
        Console.WriteLine("disposing in my class");
        base.Dispose(disposing);
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyStream stream = new MyStream();
        DoSomething(stream);
        stream.Dispose();

        Console.WriteLine("end of program");
    }

    private static void DoSomething(Stream stream)
    {
        using (var writer = new StreamWriter(stream))
        {
            Console.WriteLine("inside using statement");
        }

        Console.WriteLine("after writing");
    }
}

结果:

inside using statement
disposing in my class
after writing
disposing in my class
end of program

最佳答案

在最顶部的流上调用 close 会向下级联,并将全部关闭,但不建议这样做,因为很难密切关注打开的内容和未打开的内容。正如另一个回答者所说,虔诚地使用 using block 。

希望这有帮助!

关于c# - 将流包装在流中 - 包装后的流会被正确处理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6899307/

相关文章:

c# - 基于参数抛出/不抛出异常 - 为什么这不是一个好主意?

c# - 原点左/基线的拉绳

php - 流式传输文件时 CURL 比 fread 慢?如何加速 CURL

javascript - 使用缓冲区和流在多个文本文件中搜索字符串并在nodejs中查找行号

c# - 将 blob (.bacpac) 转换为 .bacpac 文件以将数据库导入到 SQL Server Azure?

c# - 为什么这个GridView无法更新数据

iOS 5 流式 JSON 端点

c# - 什么时候不能使用 SafeHandle 而不是 Finalizer/IDisposable?

c# - 当 C# 超出范围时,C# 是否自动将 "dispose"IDisposable 对象?

c# - 是否存在不会为 'using' block 调用 Dispose 的情况?