BufferedStream.Read Método

Definición

Sobrecargas

Read(Span<Byte>)

Copia los bytes de la secuencia almacenada en búfer actual en un intervalo de bytes y avanza la posición dentro de la secuencia almacenada en búfer el número de bytes leídos.Copies bytes from the current buffered stream to a byte span and advances the position within the buffered stream by the number of bytes read.

Read(Byte[], Int32, Int32)

Copia bytes, procedentes de la secuencia actual almacenada en el búfer, en una matriz.Copies bytes from the current buffered stream to an array.

Read(Span<Byte>)

Copia los bytes de la secuencia almacenada en búfer actual en un intervalo de bytes y avanza la posición dentro de la secuencia almacenada en búfer el número de bytes leídos.Copies bytes from the current buffered stream to a byte span and advances the position within the buffered stream by the number of bytes read.

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

Parámetros

destination
Span<Byte>

Región de memoria.A region of memory. Cuando este método finaliza, el contenido de esta región se reemplaza por los bytes leídos del origen actual.When this method returns, the contents of this region are replaced by the bytes read from the current source.

Devoluciones

Int32

Número total de bytes leídos en el búfer.The total number of bytes read into the buffer. Puede ser menor que el número de bytes asignado en el búfer si esos bytes no están disponibles en ese momento o cero (0) si se ha alcanzado el final de la secuencia.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.

Comentarios

Utilice la CanRead propiedad para determinar si la instancia actual admite operaciones de lectura.Use the CanRead property to determine whether the current instance supports reading. Use el ReadAsync método para leer de forma asincrónica desde la secuencia actual.Use the ReadAsync method to read asynchronously from the current stream.

Las implementaciones de este método leen un máximo de buffer.Length bytes de la secuencia actual y los almacenan en buffer .Implementations of this method read a maximum of buffer.Length bytes from the current stream and store them in buffer. La posición actual dentro de la secuencia se avanza 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.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. Las implementaciones devuelven el número de bytes leídos.Implementations return the number of bytes read. La implementación se bloqueará hasta que se pueda leer al menos un byte de datos, en caso de que no haya datos disponibles.The implementation will block until at least one byte of data can be read, in the event that no data is available. Read devuelve 0 solo cuando no hay más datos en la secuencia y no se espera más (por ejemplo, un socket cerrado o el final del archivo).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). Una implementación es gratuita para devolver menos bytes de los solicitados, incluso si no se ha alcanzado el final de la secuencia.An implementation is free to return fewer bytes than requested even if the end of the stream has not been reached.

Se usa BinaryReader para leer los tipos de datos primitivos.Use BinaryReader for reading primitive data types.

Se aplica a

Read(Byte[], Int32, Int32)

Copia bytes, procedentes de la secuencia actual almacenada en el búfer, en una matriz.Copies bytes from the current buffered stream to an array.

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

Parámetros

array
Byte[]

Búfer en el que se van a copiar los bytes.The buffer to which bytes are to be copied.

offset
Int32

Desplazamiento de bytes en el búfer donde va a comenzar la lectura de bytes.The byte offset in the buffer at which to begin reading bytes.

count
Int32

Número de bytes que se va a leer.The number of bytes to be read.

Devoluciones

Int32

Número total de bytes leídos en array.The total number of bytes read into array. Éste puede ser menor que el número de bytes solicitados si ese número de bytes no se encuentra disponible, o bien puede ser 0 si se alcanza el final de la secuencia antes de que puedan leerse datos.This can be less than the number of bytes requested if that many bytes are not currently available, or 0 if the end of the stream has been reached before any data can be read.

Excepciones

La longitud de array menos offset es menor que count.Length of array minus offset is less than count.

array es null.array is null.

offset o count es negativo.offset or count is negative.

La secuencia no está abierta o es null.The stream is not open or is null.

La secuencia no admite lectura.The stream does not support reading.

Se efectuó una llamada a los métodos después de cerrar la secuencia.Methods were called after the stream was closed.

Ejemplos

Este ejemplo de código forma parte de un ejemplo más extenso proporcionado para la BufferedStream clase.This code example is part of a larger example provided for the BufferedStream class.

// 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.
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"))

Comentarios

El Read método devolverá 0 solo si se alcanza el final de la secuencia.The Read method will return 0 only if the end of the stream is reached. En todos los demás casos, Read siempre lee al menos un byte de la secuencia antes de devolver.In all other cases, Read always reads at least one byte from the stream before returning. Por definición, si no hay datos disponibles en la secuencia en una llamada a Read , el Read método devuelve 0 (el final de la secuencia se alcanza automáticamente).By definition, if no data is available from the stream upon a call to Read, the Read method returns 0 (the end of the stream is reached automatically). Una implementación es gratuita para devolver menos bytes de los solicitados, incluso si no se ha alcanzado el final de la secuencia.An implementation is free to return fewer bytes than requested even if the end of the stream has not been reached.

Se usa BinaryReader para leer los tipos de datos primitivos.Use BinaryReader for reading primitive data types.

Consulte también

Se aplica a