C# Stream.Read – 从流中读取数据

  • Post category:C#

C#中的Stream.Read方法是用于从当前流中读取数据的方法,它返回读取到的数据字节数,术语称为bytesRead。该方法的定义如下:

public virtual int Read(byte[] buffer, int offset, int count);

其中,参数buffer表示从流中读取字节序列的缓冲区;参数offset表示缓冲区中的偏移量,即方法将从缓冲区中的offset位置开始读取数据;参数count表示要读取的最大字节数。

当调用该方法时,它会将从流中读取的数据存储到提供的buffer缓冲区中,并将读取的字节数作为返回值返回。如果在读取数据时遇到流的末尾,则返回值可能小于count。

如果没有更多的数据可供读取,则该方法将返回0。

下面是一个示例,演示了如何使用Stream.Read方法从文件中读取数据:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        using (FileStream stream = File.Open("file.txt", FileMode.Open))
        {
            byte[] buffer = new byte[1024];
            int bytesRead = 0;
            do
            {
                bytesRead = stream.Read(buffer, 0, buffer.Length);
                Console.WriteLine(bytesRead);
            }
            while (bytesRead > 0);
        }
    }
}

该示例使用FileStream在C#中打开了一个名为file.txt的文件,并创建了一个缓冲区来存储从文件中读取的数据。然后,该示例一次又一次地读取文件,每次读取的字节数大于0时将字节数打印到控制台。

另一个示例演示了如何使用Stream.Read方法从网络流中读取数据:

using System;
using System.Net;
using System.Net.Sockets;

class Program
{
    static void Main()
    {
        using (TcpClient client = new TcpClient("localhost", 8080))
        using (NetworkStream stream = client.GetStream())
        {
            byte[] buffer = new byte[1024];
            int bytesRead = 0;
            do
            {
                bytesRead = stream.Read(buffer, 0, buffer.Length);
                Console.WriteLine(bytesRead);
            }
            while (bytesRead > 0);
        }
    }
}

该示例通过TcpClient在C#中连接了本地主机的8080端口,并使用NetworkStream读取来自该端口的数据。然后,该示例一次又一次地读取流中的数据,每次读取的字节数大于0时将字节数打印到控制台。

总之,Stream.Read方法是一个很有用的方法,可用于从各种不同类型的流中读取数据。无论是文件还是网络流,都可以使用该方法来读取数据。然而,需要注意的是,该方法是阻塞的,即在读取操作完成之前,该方法将一直阻塞。