Stream.Read 方法

定义

重载

Read(Span<Byte>)

当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。

Read(Byte[], Int32, Int32)

当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。

Read(Span<Byte>)

Source:
Stream.cs
Source:
Stream.cs
Source:
Stream.cs

当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。

C#
public virtual int Read (Span<byte> buffer);

参数

buffer
Span<Byte>

内存的区域。 当此方法返回时,此区域的内容将替换为从当前源读取的字节。

返回

读入缓冲区中的总字节数。 如果多个字节当前不可用,则此值可能小于缓冲区的大小;如果缓冲区的长度为零或已达到流的末尾,则为零 (0) 。

注解

CanRead使用 属性确定当前实例是否支持读取。 ReadAsync使用 方法从当前流异步读取。

此方法的实现从当前流中读取最大字节数 buffer.Length ,并将其存储在 中 buffer。 流中的当前位置按读取的字节数提前;但是,如果发生异常,流中的当前位置保持不变。 实现返回读取的字节数。 如果请求的字节数超过零个,则实现不会完成该操作,直到可以读取至少一个字节的数据 (如果请求了零个字节,某些实现可能类似地未完成,直到至少有一个字节可用,但在此类情况下,不会从流中使用任何数据) 。 Read 仅当请求了零个字节或流中没有更多数据并且预期不再 ((例如关闭的套接字或文件) 末尾)时,才返回 0。 实现可以自由地返回比请求的字节少,即使尚未到达流的末尾。

用于 BinaryReader 读取基元数据类型。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

Read(Byte[], Int32, Int32)

Source:
Stream.cs
Source:
Stream.cs
Source:
Stream.cs

当在派生类中重写时,从当前流读取字节序列,并将此流中的位置提升读取的字节数。

C#
public abstract int Read (byte[] buffer, int offset, int count);

参数

buffer
Byte[]

字节数组。 当此方法返回时,此缓冲区包含指定的字符数组,此数组中 offset 和 (offset + count - 1) 之间的值被从当前源中读取的字节所替换。

offset
Int32

buffer 中的从零开始的字节偏移量,从此处开始存储从当前流中读取的数据。

count
Int32

要从当前流中最多读取的字节数。

返回

读入缓冲区中的总字节数。 如果多个字节当前不可用,则这可以小于请求的字节数;如果 count 为 0 或已到达流的末尾,则为零 (0) 。

例外

offsetcount 的总和大于缓冲区长度。

buffernull

offsetcount 为负数。

出现 I/O 错误。

流不支持读取。

在流关闭后调用方法。

示例

以下示例演示如何使用 Read 读取数据块。

C#
using System;
using System.IO;

public class Block
{
    public static void Main()
    {
        Stream s = new MemoryStream();
        for (int i = 0; i < 122; i++)
        {
            s.WriteByte((byte)i);
        }
        s.Position = 0;

        // Now read s into a byte buffer with a little padding.
        byte[] bytes = new byte[s.Length + 10];
        int numBytesToRead = (int)s.Length;
        int numBytesRead = 0;
        do
        {
            // Read may return anything from 0 to 10.
            int n = s.Read(bytes, numBytesRead, 10);
            numBytesRead += n;
            numBytesToRead -= n;
        } while (numBytesToRead > 0);
        s.Close();

        Console.WriteLine("number of bytes read: {0:d}", numBytesRead);
    }
}

注解

CanRead使用 属性确定当前实例是否支持读取。 ReadAsync使用 方法从当前流异步读取。

此方法的实现从当前流中读取最大字节数 count ,并将其存储在 buffer 开头 offset。 流中的当前位置按读取的字节数提前;但是,如果发生异常,流中的当前位置保持不变。 实现返回读取的字节数。 如果请求的字节数超过零个,则实现将不完成操作,直到至少一个字节的数据可以读取 (某些实现可能类似地未完成,直到至少一个字节可用,即使请求了零个字节,但在这种情况下,不会从流使用任何数据) 。 Read 仅当请求了零个字节或流中没有更多数据并且预期不再 ((例如关闭的套接字或文件) 末尾)时,才返回 0。 实现可以自由地返回比请求的字节少,即使尚未到达流的末尾。

用于 BinaryReader 读取基元数据类型。

另请参阅

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0