Stream.Read Метод

Определение

Перегрузки

Read(Span<Byte>)

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

Read(Byte[], Int32, Int32)

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

Read(Span<Byte>)

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

public:
 virtual int Read(Span<System::Byte> buffer);
public virtual int Read (Span<byte> buffer);
abstract member Read : Span<byte> -> int
override this.Read : Span<byte> -> int
Public Overridable Function Read (buffer As Span(Of Byte)) As Integer

Параметры

buffer
Span<Byte>

Область памяти. При возвращении данного метода содержимое этой области заменяется байтами, считанными из текущего источника.

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

Int32

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

Комментарии

CanRead Используйте свойство, чтобы определить, поддерживает ли текущий экземпляр чтение. ReadAsync Используйте метод для асинхронного чтения из текущего потока.

Реализации этого метода считывают максимум buffer.Length байтов из текущего потока и сохраняют их в buffer. Текущая позиция в потоке расширена по числу считываемых байтов; однако, если возникает исключение, текущая позиция в потоке остается неизменной. Реализации возвращают число считываемых байтов. Реализация блокируется до тех пор, пока не будет прочитан хотя бы один байт данных, в случае отсутствия данных. Read возвращает значение 0, только если в потоке больше нет данных и больше не ожидается (например, закрытый сокет или конец файла). Реализация может возвращать меньше байтов, чем запрошено, даже если конец потока не достигнут.

Используется BinaryReader для чтения примитивных типов данных.

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

Read(Byte[], Int32, Int32)

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

public:
 abstract int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public abstract int Read (byte[] buffer, int offset, int count);
abstract member Read : byte[] * int * int -> int
Public MustOverride Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Параметры

buffer
Byte[]

Массив байтов. После завершения выполнения данного метода буфер содержит указанный массив байтов, в котором значения в интервале между offset и (offset + count - 1) заменены байтами, считанными из текущего источника.

offset
Int32

Смещение байтов (начиная с нуля) в buffer, с которого начинается сохранение данных, считанных из текущего потока.

count
Int32

Максимальное количество байтов, которое должно быть считано из текущего потока.

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

Int32

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

Исключения

Сумма offset и count больше, чем длина буфера.

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

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

Ошибка ввода-вывода.

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

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

Примеры

В следующем примере показано, как считывать Read блок данных.

using namespace System;
using namespace System::IO;

public ref class Block
{
public:
    static void Main()
    {
        Stream^ s = gcnew MemoryStream();
        for (int i = 0; i < 100; i++)
        {
            s->WriteByte((Byte)i);
        }
        s->Position = 0;

        // Now read s into a byte buffer.
        array<Byte>^ bytes = gcnew array<Byte>(s->Length);
        int numBytesToRead = (int) s->Length;
        int numBytesRead = 0;
        while (numBytesToRead > 0)
        {
            // Read may return anything from 0 to 10.
            int n = s->Read(bytes, numBytesRead, 10);
            // The end of the file is reached.
            if (n == 0)
            {
                break;
            }
            numBytesRead += n;
            numBytesToRead -= n;
        }
        s->Close();
        // numBytesToRead should be 0 now, and numBytesRead should
        // equal 100.
        Console::WriteLine("number of bytes read: {0:d}", numBytesRead);
    }
};

int main()
{
    Block::Main();
}
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);
    }
}
Imports System.IO

Public Class Block
    Public Shared Sub Main()
        Dim s As Stream = New MemoryStream()
        For i As Integer = 0 To 121
            s.WriteByte(CType(i, Byte))
        Next i
        s.Position = 0

        ' Now read s into a byte buffer that is padded slightly.
        Dim bytes(s.Length + 10) As Byte
        Dim numBytesToRead As Integer = s.Length
        Dim numBytesRead As Integer = 0
        Dim n As Integer
        Do
            ' Read may return anything from 0 to 10.
            n = s.Read(bytes, numBytesRead, 10)
            ' The end of the file is reached.
            numBytesRead += n
            numBytesToRead -= n
        Loop While numBytesToRead > 0

        s.Close()
    
        Console.WriteLine("number of bytes read: {0:d}", numBytesRead)
    End Sub
End Class

Комментарии

CanRead Используйте свойство, чтобы определить, поддерживает ли текущий экземпляр чтение. ReadAsync Используйте метод для асинхронного чтения из текущего потока.

Реализации этого метода считывают максимум count байтов из текущего потока и сохраняют их в buffer начале offset. Текущая позиция в потоке расширена числом считываемых байтов; однако при возникновении исключения текущая позиция в потоке остается неизменной. Реализации возвращают число считываемых байтов. Реализация блокируется до тех пор, пока не будет прочитан хотя бы один байт данных, в случае отсутствия данных. Read возвращает значение 0 только в том случае, если в потоке больше нет данных и больше не ожидается (например, закрытый сокет или конец файла). Реализация может возвращать меньше байтов, чем запрошено, даже если конец потока не достигнут.

Используется BinaryReader для чтения примитивных типов данных.

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

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