Stream.Read Метод

Определение

Перегрузки

Read(Span<Byte>)

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов.When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

Read(Byte[], Int32, Int32)

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов.When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

Read(Span<Byte>)

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов.When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

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>

Область памяти.A region of memory. При возвращении данного метода содержимое этой области заменяется байтами, считанными из текущего источника.When this method returns, the contents of this region are replaced by the bytes read from the current source.

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

Общее количество байтов, считанных в буфер.The total number of bytes read into the buffer. Это число может быть меньше количества выделенных в буфере байтов, если столько байтов в настоящее время недоступно, а также равняться нулю (0), если был достигнут конец потока.This can be less than the number of bytes allocated in the buffer if that many bytes are not currently available, or zero (0) if the end of the stream has been reached.

Комментарии

Используйте свойство CanRead, чтобы определить, поддерживает ли текущий экземпляр чтение.Use the CanRead property to determine whether the current instance supports reading. Используйте метод ReadAsync для асинхронного чтения из текущего потока.Use the ReadAsync method to read asynchronously from the current stream.

Реализации этого метода считывают максимум buffer.Length байт из текущего потока и сохраняют их в buffer.Implementations of this method read a maximum of buffer.Length bytes from the current stream and store them in buffer. Текущая координата в потоке увеличивается на число считанных байтов; Однако при возникновении исключения текущее место в потоке остается неизменным.The current position within the stream is advanced by the number of bytes read; however, if an exception occurs, the current position within the stream remains unchanged. Реализации возвращают число считанных байтов.Implementations return the number of bytes read. Реализация будет заблокирована до тех пор, пока не будет прочитан хотя бы один байт данных в случае, если данные недоступны.The implementation will block until at least one byte of data can be read, in the event that no data is available. Read возвращает 0, только если в потоке больше нет данных и что больше не ожидается (например, закрытый сокет или конец файла).Read returns 0 only when there is no more data in the stream and no more is expected (such as a closed socket or end of file). Реализация может возвращать меньше байтов, чем было запрошено, даже если конец потока не был достигнут.An implementation is free to return fewer bytes than requested even if the end of the stream has not been reached.

Для чтения примитивных типов данных используйте BinaryReader.Use BinaryReader for reading primitive data types.

Read(Byte[], Int32, Int32)

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов.When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

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[]

Массив байтов.An array of bytes. После завершения выполнения данного метода буфер содержит указанный массив байтов, в котором значения в интервале между offset и (offset + count - 1) заменены байтами, считанными из текущего источника.When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count - 1) replaced by the bytes read from the current source.

offset
Int32

Смещение байтов (начиная с нуля) в buffer, с которого начинается сохранение данных, считанных из текущего потока.The zero-based byte offset in buffer at which to begin storing the data read from the current stream.

count
Int32

Максимальное количество байтов, которое должно быть считано из текущего потока.The maximum number of bytes to be read from the current stream.

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

Общее количество байтов, считанных в буфер.The total number of bytes read into the buffer. Это число может быть меньше количества запрошенных байтов, если столько байтов в настоящее время недоступно, а также равняться нулю (0), если был достигнут конец потока.This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached.

Исключения

Сумма offset и count больше, чем длина буфера.The sum of offset and count is larger than the buffer length.

Параметр buffer равен null.buffer is null.

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

Ошибка ввода-вывода.An I/O error occurs.

Поток не поддерживает чтение.The stream does not support reading.

Методы были вызваны после закрытия потока.Methods were called after the stream was closed.

Примеры

В следующем примере показано, как использовать Read для чтения блока данных.The following example shows how to use Read to read a block of data.

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, чтобы определить, поддерживает ли текущий экземпляр чтение.Use the CanRead property to determine whether the current instance supports reading. Используйте метод ReadAsync для асинхронного чтения из текущего потока.Use the ReadAsync method to read asynchronously from the current stream.

Реализации этого метода считывают максимум count байт из текущего потока и сохраняют их в buffer, начиная с offset.Implementations of this method read a maximum of count bytes from the current stream and store them in buffer beginning at offset. Текущая координата в потоке увеличивается на число считанных байтов; Однако при возникновении исключения текущее место в потоке остается неизменным.The current position within the stream is advanced by the number of bytes read; however, if an exception occurs, the current position within the stream remains unchanged. Реализации возвращают число считанных байтов.Implementations return the number of bytes read. Реализация будет заблокирована до тех пор, пока не будет прочитан хотя бы один байт данных в случае, если данные недоступны.The implementation will block until at least one byte of data can be read, in the event that no data is available. Read возвращает 0, только если в потоке больше нет данных и что больше не ожидается (например, закрытый сокет или конец файла).Read returns 0 only when there is no more data in the stream and no more is expected (such as a closed socket or end of file). Реализация может возвращать меньше байтов, чем было запрошено, даже если конец потока не был достигнут.An implementation is free to return fewer bytes than requested even if the end of the stream has not been reached.

Для чтения примитивных типов данных используйте BinaryReader.Use BinaryReader for reading primitive data types.

Дополнительно

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