Flush()
如果我写这样的东西,我不确定是否需要调用使用过的对象:
using (FileStream...)
using (CryptoStream...)
using (BinaryWriter...)
{
// do something
}
他们总是自动冲洗吗?该using
语句何时刷新它们,何时不刷新(如果可能发生)?
一旦离开 using 块的作用域,流就会关闭并被释放。Close() 调用 Flush(),因此您不需要手动调用它。
它会有所不同,Stream
默认情况下不会调用Flush()
该Dispose
方法,但有一些例外,例如FileStream
. 原因是某些流对象不需要调用,Flush
因为它们不使用缓冲区。一些,例如MemoryStream
显式覆盖该方法以确保不采取任何操作(使其成为无操作)。
这意味着如果您不想在那里有额外的调用,那么您应该检查Stream
您正在使用的子类是否实现了方法中的调用Dispose
以及是否有必要。
无论如何,为了可读性而调用它可能是一个好主意 - 类似于某些人Close()
在使用语句末尾的调用方式:
using (FileStream fS = new FileStream(params))
using (CryptoStream cS = new CryptoStream(params))
using (BinaryWriter bW = new BinaryWriter(params))
{
doStuff();
//from here it's just readability/assurance that things are properly flushed.
bW.Flush();
bW.Close();
cS.Flush();
cS.Close();
fS.Flush();
fS.Close();
}