BufferedStream.Read(Byte[], Int32, Int32) Метод

Определение

Копирует байты из текущего буферизованного потока в массив.

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

Параметры

array
Byte[]

Буфер, в который копируются байты.

offset
Int32

Смещение байтов в буфере, с которого начинается чтение байтов.

count
Int32

Число байтов для чтения.

Возвращаемое значение

Общее количество байтов, считываемых в array. Это может быть меньше, чем количество байтов, запрашиваемых в данный момент, если количество байтов недоступно, или 0, если конец потока достигнут до того, как любые данные можно будет считывать.

Исключения

Длина минуса arrayoffset меньше count.

array равно null.

offset или count отрицательный.

Поток не открыт или не открыт 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 для чтения примитивных типов данных.

Применяется к

См. также раздел