Поделиться через


BufferedStream.Read Метод

Определение

Перегрузки

Read(Span<Byte>)

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

Read(Byte[], Int32, Int32)

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

Read(Span<Byte>)

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

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

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

Параметры

arraybuffer
Byte[]

Буфер, в который необходимо скопировать байты.

offset
Int32

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

count
Int32

Количество байтов, чтение которых необходимо выполнить.

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

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

Исключения

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

array имеет значение null.

offset или count является отрицательным значением.

Поток не открыт или его значение равно null.

Поток не поддерживает чтение.

Методы были вызваны после закрытия потока.

Примеры

Этот пример входит в состав более крупного примера использования класса BufferedStream.

// Receive data using the BufferedStream.
Console::WriteLine(  "Receiving data using BufferedStream." );
bytesReceived = 0;
startTime = DateTime::Now;
while ( bytesReceived < numberOfLoops * receivedData->Length )
{
   bytesReceived += bufStream->Read( receivedData, 0, receivedData->Length );
}

bufferedTime = (DateTime::Now - startTime).TotalSeconds;
Console::WriteLine( "{0} bytes received in {1} seconds.\n", bytesReceived.ToString(), bufferedTime.ToString(  "F1" ) );
// 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 для чтения примитивных типов данных.

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

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