我正在向要发送的方法发送流,在这些方法中,我使用的是二进制读取器/ wrtier。当读取器/写入器被处置时,或者被using引用时或刚被引用时,流是否也被关闭?
using
我会发送BinaryReader / Writer,但我也使用StreamReader(也许我应该解决这个问题。我仅将其用于GetLine和ReadLine)。如果每次关闭写入器/读取器时都关闭流,这将很麻烦。
是的,StreamReader,StreamWriter,BinaryReader和BinaryWriter所有关闭/处置其底层流时,你叫Dispose他们。如果读取器/写入器只是垃圾回收,则它们 不会 处理流-您应该始终处理读取器/写入器,最好使用using语句。(实际上,这些类都不具有终结器,也不应该具有终结器。)
StreamReader
StreamWriter
BinaryReader
BinaryWriter
Dispose
就个人而言,我也希望对流也具有using语句。您可以using整齐地嵌套语句而无需大括号:
using (Stream stream = ...) using (StreamReader reader = new StreamReader(stream, Encoding.Whatever)) { }
即使using该流的语句有点多余(除非StreamReader构造函数抛出异常),我还是将其视为最佳实践,因为如果您删除了StreamReader并在以后直接使用该流,则您将已经得到了正确的处理语义。