Stream.Read Método

Definición

Sobrecargas

Read(Span<Byte>)

Cuando se reemplaza en una clase derivada, se lee una secuencia de bytes en la secuencia actual y se hace avanzar la posición dentro de la secuencia el número de bytes leídos.

Read(Byte[], Int32, Int32)

Cuando se reemplaza en una clase derivada, se lee una secuencia de bytes en la secuencia actual y se hace avanzar la posición dentro de la secuencia el número de bytes leídos.

Read(Span<Byte>)

Cuando se reemplaza en una clase derivada, se lee una secuencia de bytes en la secuencia actual y se hace avanzar la posición dentro de la secuencia el número de bytes leídos.

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

Parámetros

buffer
Span<Byte>

Región de memoria. Cuando este método finaliza, el contenido de esta región se reemplaza por los bytes leídos del origen actual.

Devoluciones

Número total de bytes leídos en el búfer. Puede ser menor que el tamaño del búfer si no hay muchos bytes disponibles actualmente, o cero (0) si la longitud del búfer es cero o se ha alcanzado el final de la secuencia.

Comentarios

Utilice la CanRead propiedad para determinar si la instancia actual admite la lectura. Use el ReadAsync método para leer de forma asincrónica desde la secuencia actual.

Las implementaciones de este método leen un máximo de buffer.Length bytes de la secuencia actual y las almacenan en buffer. La posición actual dentro de la secuencia está avanzada por el número de bytes leídos; Sin embargo, si se produce una excepción, la posición actual dentro de la secuencia permanece sin cambios. Las implementaciones devuelven el número de bytes leídos. Si se solicitan más de cero bytes, la implementación no completará la operación hasta que se pueda leer al menos un byte de datos (si se solicitó cero bytes, es posible que algunas implementaciones no se completen de forma similar hasta que haya al menos un byte disponible, pero no se consumirán datos de la secuencia en este caso). Read devuelve 0 solo si se solicitó cero bytes o cuando no hay más datos en la secuencia y no se espera más (como un socket cerrado o el final del archivo). Una implementación es libre para devolver menos bytes de los solicitados incluso si no se ha alcanzado el final de la secuencia.

Se usa BinaryReader para leer tipos de datos primitivos.

Se aplica a

Read(Byte[], Int32, Int32)

Cuando se reemplaza en una clase derivada, se lee una secuencia de bytes en la secuencia actual y se hace avanzar la posición dentro de la secuencia el número de bytes leídos.

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

Parámetros

buffer
Byte[]

Matriz de bytes. Cuando este método devuelve un valor, el búfer contiene la matriz de bytes especificada con valores entre offset y (offset + count - 1) reemplazada por los bytes leídos del origen actual.

offset
Int32

Posición de desplazamiento en bytes de base cero de buffer donde se comienza a almacenar los datos leídos de la secuencia actual.

count
Int32

Número máximo de bytes que se deben leer de la secuencia actual.

Devoluciones

Número total de bytes leídos en el búfer. Puede ser menor que el número de bytes solicitados si no hay muchos bytes disponibles actualmente, o cero (0) si count es 0 o se ha alcanzado el final de la secuencia.

Excepciones

La suma de offset y count es mayor que la longitud del búfer.

buffer es null.

offset o count es negativo.

Error de E/S.

La secuencia no admite lectura.

Se efectuó una llamada a los métodos después de cerrar la secuencia.

Ejemplos

En el ejemplo siguiente se muestra cómo usar Read para leer un bloque de datos.

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

Comentarios

Utilice la CanRead propiedad para determinar si la instancia actual admite la lectura. Use el ReadAsync método para leer de forma asincrónica desde la secuencia actual.

Las implementaciones de este método leen un máximo de count bytes de la secuencia actual y las almacenan a buffer partir offsetde . La posición actual dentro de la secuencia está avanzada por el número de bytes leídos; Sin embargo, si se produce una excepción, la posición actual dentro de la secuencia permanece sin cambios. Las implementaciones devuelven el número de bytes leídos. Si se solicitan más de cero bytes, la implementación no completará la operación hasta que se pueda leer al menos un byte de datos (es posible que algunas implementaciones no se completen de forma similar hasta que al menos un byte esté disponible incluso si se solicitó cero bytes, pero no se consumirán datos de la secuencia en este caso). Read devuelve 0 solo si se solicitó cero bytes o cuando no hay más datos en la secuencia y no se espera más (como un socket cerrado o el final del archivo). Una implementación es libre para devolver menos bytes de los solicitados incluso si no se ha alcanzado el final de la secuencia.

Se usa BinaryReader para leer tipos de datos primitivos.

Consulte también

Se aplica a