一尘不染

部署streamreader是否关闭流?

c#

我正在向要发送的方法发送流,在这些方法中,我使用的是二进制读取器/
wrtier。当读取器/写入器被处置时,或者被using引用时或刚被引用时,流是否也被关闭?

我会发送BinaryReader /
Writer,但我也使用StreamReader(也许我应该解决这个问题。我仅将其用于GetLine和ReadLine)。如果每次关闭写入器/读取器时都关闭流,这将很麻烦。


阅读 405

收藏
2020-05-19

共1个答案

一尘不染

是的,StreamReaderStreamWriterBinaryReaderBinaryWriter所有关闭/处置其底层流时,你叫Dispose他们。如果读取器/写入器只是垃圾回收,则它们
不会 处理流-您应该始终处理读取器/写入器,最好使用using语句。(实际上,这些类都不具有终结器,也不应该具有终结器。)

就个人而言,我也希望对流也具有using语句。您可以using整齐地嵌套语句而无需大括号:

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

即使using该流的语句有点多余(除非StreamReader构造函数抛出异常),我还是将其视为最佳实践,因为如果您删除了StreamReader并在以后直接使用该流,则您将已经得到了正确的处理语义。

2020-05-19