为什么一个的BinaryWriter闭合外部流处置,以及如何预防呢? (.NET C#)(Why

2019-06-25 01:16发布

我有一个接收流使用的BinaryWriter它来写一个方法。 但是,当我处理这个的BinaryWriter还关闭该流。 我可以把它未予处置,所以我可以离开我的流打开?

Answer 1:

只是不调用Dispose,使用冲洗代替,它的安全。



Answer 2:

作为.NET 4.5中,类的BinaryWriter有一个新的构造函数,需要一个布尔参数指示是否离开流开放与否。

参考: http://msdn.microsoft.com/en-us/library/gg712841.aspx

public BinaryWriter(
    Stream output,
    Encoding encoding,
    bool leaveOpen
)


Answer 3:

在的情况下BinaryWriter ,这不是一个直接的选择(虽然有些流包装做的让你控制这一点,例如GZipStream等)。

乔恩在NonClosingStreamWrapper MiscUtil这应该工作:您在非封闭包装包装你的流,并给予包装器BinaryWriter 。 这主要是通过一切除了通过Close()Dispose()



Answer 4:

受保护的BinaryWriter.Dispose(布尔)方法是虚拟的,它是所有关闭流(你可以检查它是否是真实的反射器 )。 - 该方法是由Dispose()方法被调用。

你可以简单地继承了一个的BinaryWriter类并重写的Dispose(布尔)方法什么都不做,或者别的产品总数。



文章来源: Why a BinaryWriter closes the outer Stream on disposal, and how to prevent that? (.NET C#)