C# Stream.Flush – 刷新流

  • Post category:C#

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() 方法确保数据被完整地写入到网络流。