Stream.Flush() 方法用于在将数据从缓冲区向下层数据流中写入之前,强制将缓冲区中的数据写入下层数据流。这个方法对于所有派生自 Stream 类的流都是可用的。
在默认情况下,写入到 Stream 类的数据是缓冲的。也就是说,当写入某个字节或一组字节时,并不是立即写入到其下层的数据流中,而是先存储到应用程序的缓冲区中,当缓冲区达到预设的大小,或者 Stream 的 Close() 方法调用时,才将缓冲区中的数据一次性写入到下层数据流中。Flush() 方法就是在达到预设的大小之前,将缓冲区强制写入下层数据流中的方法。
以下是示例:
示例1:使用File类将一批字节写入文件
byte[] data = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
using (FileStream stream = new FileStream("example.txt", FileMode.Create))
{
stream.Write(data, 0, data.Length);
stream.Flush();
}
在上面的示例中,使用 FileStream 写入了数据,为了确保这些数据被完整地写入到文件中,使用了 Flush() 方法。
示例2:将一个网络流的缓存写入网络
using (FileStream fs = new FileStream("D:\\test.txt", FileMode.Open, FileAccess.Read))
using (TcpClient client = new TcpClient("127.0.0.1", 80))
using (NetworkStream networkStream = client.GetStream())
{
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
networkStream.Write(buffer, 0, bytesRead);
networkStream.Flush();
}
}
在上面的示例中,将数据从文件流写入到网络流时,也需要使用 Flush() 方法确保数据被完整地写入到网络流。