Бөлісу құралы:


BufferedStream.Read Метод

Определение

Перегрузки

Имя Описание
Read(Span<Byte>)

Копирует байты из текущего буферизованного потока в диапазон байтов и перемещает позицию в буферизованном потоке по количеству операций чтения байтов.

Read(Byte[], Int32, Int32)

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

Read(Span<Byte>)

Исходный код:
BufferedStream.cs
Исходный код:
BufferedStream.cs
Исходный код:
BufferedStream.cs
Исходный код:
BufferedStream.cs
Исходный код:
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)

Исходный код:
BufferedStream.cs
Исходный код:
BufferedStream.cs
Исходный код:
BufferedStream.cs
Исходный код:
BufferedStream.cs
Исходный код:
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, если конец потока достигнут до того, как любые данные можно будет считывать.

Исключения

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

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

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