BufferedStream.Read Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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. |
Read(Byte[], Int32, Int32) |
Copia bytes, procedentes de la secuencia actual almacenada en el búfer, en una matriz. |
Read(Span<Byte>)
- Source:
- BufferedStream.cs
- Source:
- BufferedStream.cs
- Source:
- BufferedStream.cs
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.
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
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 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.
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. La implementación se bloqueará hasta que se pueda leer al menos un byte de datos, en caso de que no haya datos disponibles. Read
devuelve 0 solo 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)
- Source:
- BufferedStream.cs
- Source:
- BufferedStream.cs
- Source:
- BufferedStream.cs
Copia bytes, procedentes de la secuencia actual almacenada en el búfer, en una matriz.
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
Parámetros
- arraybuffer
- Byte[]
Búfer en el que se van a copiar los bytes.
- offset
- Int32
Desplazamiento de bytes en el búfer donde va a comenzar la lectura de bytes.
- count
- Int32
Número de bytes que se va a leer.
Devoluciones
Número total de bytes leídos en 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.
Excepciones
La longitud de array
menos offset
es menor que count
.
array
es null
.
offset
o count
es negativo.
La secuencia no está abierta o es null
.
La secuencia no admite lectura.
Se efectuó una llamada a los métodos después de cerrar la secuencia.
Ejemplos
Este ejemplo de código es parte de un ejemplo más grande proporcionado para la clase 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"))
Comentarios
El Read
método devolverá 0 solo si se alcanza el final de la secuencia. En todos los demás casos, Read
siempre lee al menos un byte de la secuencia antes de devolverlo. Por definición, si no hay datos disponibles desde la secuencia tras una llamada a Read
, el Read
método devuelve 0 (el final de la secuencia se alcanza automáticamente). 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
- BlockCopy(Array, Int32, Array, Int32, Int32)
- CanRead
- Write(Byte[], Int32, Int32)
- E/S de archivos y secuencias
- Cómo: Leer texto de un archivo
- Cómo: Escribir texto en un archivo