通过


BufferedStream.Read 方法

定义

重载

名称 说明
Read(Span<Byte>)

将字节从当前缓冲流复制到字节范围,并通过读取的字节数推进缓冲流中的位置。

Read(Byte[], Int32, Int32)

将字节从当前缓冲流复制到数组。

Read(Span<Byte>)

Source:
BufferedStream.cs
Source:
BufferedStream.cs
Source:
BufferedStream.cs
Source:
BufferedStream.cs
Source:
BufferedStream.cs

将字节从当前缓冲流复制到字节范围,并通过读取的字节数推进缓冲流中的位置。

public:
 override int Read(Span<System::Byte> destination);
public override int Read(Span<byte> destination);
override this.Read : Span<byte> -> int
Public Overrides Function Read (destination As Span(Of Byte)) As Integer

参数

destination
Span<Byte>

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

返回

读取到缓冲区中的字节总数。 如果缓冲区中分配的字节数当前不可用,则可以小于缓冲区中分配的字节数;如果已达到流的末尾,则为零(0)。

注解

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

此方法的实现从当前流读取最大 buffer.Length 字节数并将其存储在其中 buffer。 流中的当前位置按读取的字节数进行高级;但是,如果发生异常,流中的当前位置保持不变。 实现返回读取的字节数。 如果没有任何数据可用,则实现将阻止,直到可以读取至少一个字节的数据。 Read 仅当流中没有更多数据且不需要更多数据(如关闭套接字或文件结尾)时,才返回 0。 即使尚未到达流的末尾,实现也能够自由返回比请求的字节少。

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

适用于

Read(Byte[], Int32, Int32)

Source:
BufferedStream.cs
Source:
BufferedStream.cs
Source:
BufferedStream.cs
Source:
BufferedStream.cs
Source:
BufferedStream.cs

将字节从当前缓冲流复制到数组。

public:
 override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public:
 override int Read(cli::array <System::Byte> ^ array, int offset, int count);
public override int Read(byte[] buffer, int offset, int count);
public override int Read(byte[] array, int offset, int count);
override this.Read : byte[] * int * int -> int
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer
Public Overrides Function Read (array As Byte(), offset As Integer, count As Integer) As Integer

参数

bufferarray
Byte[]
offset
Int32

缓冲区中开始读取字节的字节偏移量。

count
Int32

要读取的字节数。

返回

读取到 array的字节总数。 如果许多字节当前不可用,则这可以小于请求的字节数;如果已到达流的末尾,则为 0,然后才能读取任何数据。

例外

减号offset长度array小于 count

arraynull

offsetcount 为负数。

流未打开或为 null

流不支持读取。

在关闭流后调用方法。

示例

该代码示例是 BufferedStream 类中的一个较大示例的一部分。

// Receive data using the BufferedStream.
Console.WriteLine("Receiving data using BufferedStream.");
bytesReceived = 0;
startTime = DateTime.Now;

int numBytesToRead = receivedData.Length;

while (numBytesToRead > 0)
{
    // Read may return anything from 0 to numBytesToRead.
    int n = bufStream.Read(receivedData,0, receivedData.Length);
    // The end of the file is reached.
    if (n == 0)
        break;
    bytesReceived += n;
    numBytesToRead -= n;
}

bufferedTime = (DateTime.Now - startTime).TotalSeconds;
Console.WriteLine("{0} bytes received in {1} seconds.\n",
    bytesReceived.ToString(),
    bufferedTime.ToString("F1"));
// Receive data using the BufferedStream.
printfn "Receiving data using BufferedStream."
bytesReceived <- 0
let startTime = DateTime.Now

let mutable numBytesToRead = receivedData.Length

let mutable broken = false
while not broken && numBytesToRead > 0 do
    // Read may return anything from 0 to numBytesToRead.
    let n = bufStream.Read(receivedData,0, receivedData.Length)
    // The end of the file is reached.
    if n = 0 then
        broken <- true
    else
        bytesReceived <- bytesReceived + n
        numBytesToRead <- numBytesToRead - n

let bufferedTime = (DateTime.Now - startTime).TotalSeconds
printfn $"{bytesReceived} bytes received in {bufferedTime:F1} seconds.\n"
' Receive data using the BufferedStream.
Console.WriteLine("Receiving data using BufferedStream.")
bytesReceived = 0
startTime = DateTime.Now

Dim numBytesToRead As Integer = receivedData.Length
Dim n As Integer
Do While numBytesToRead > 0

    'Read my return anything from 0 to numBytesToRead
    n = bufStream.Read(receivedData, 0, receivedData.Length)
    'The end of the file is reached.
    If n = 0 Then
        Exit Do
    End If

    bytesReceived += n
    numBytesToRead -= n
Loop

bufferedTime = DateTime.Now.Subtract(startTime).TotalSeconds
Console.WriteLine("{0} bytes received in {1} " & _
    "seconds." & vbCrLf, _
    bytesReceived.ToString(), _
    bufferedTime.ToString("F1"))

注解

Read仅当到达流的末尾时,该方法才会返回 0。 在所有其他情况下,在返回之前, Read 始终从流中读取至少一个字节。 根据定义,如果在调用 Read时流中没有可用数据,该方法 Read 将返回 0(自动到达流的末尾)。 即使尚未到达流的末尾,实现也能够自由返回比请求的字节少。

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

另请参阅

适用于