小编典典

处理流阅读器会关闭流吗?

all

我正在向要写入的方法发送一个流,并且在这些方法中我使用的是二进制读取器/写入器。当读取器/写入器被处理时,无论using是被引用还是仅仅在它未被引用时,流是否也关闭了?

我会发送一个 BinaryReader/Writer,但我也在使用 StreamReader(也许我应该绕过它。我只将它用于 GetLine 和
ReadLine)。如果每次关闭写入器/读取器时都关闭流,这将非常麻烦。


阅读 189

收藏
2022-08-16

共1个答案

小编典典

是的,StreamReaderStreamWriterBinaryReader并且BinaryWriter都在您调用它们时关闭/处置它们的底层流Dispose。如果读取器/写入器只是被垃圾收集,它们
不会 处理流 - 您应该始终处理读取器/写入器,最好使用using语句。(事实上​​,这些类都没有终结器,也不应该有。)

就我个人而言,我也更喜欢对流使用 using 语句。您可以非常巧妙地嵌套using不带大括号的语句:

using (Stream stream = ...)
using (StreamReader reader = new StreamReader(stream, Encoding.Whatever))
{
}

即使using流的声明有些多余(除非StreamReader构造函数抛出异常),但我认为这是最佳实践,因为如果您摆脱了StreamReader并在以后直接使用流,您将已经有了正确的处置语义。

2022-08-16