Stream.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>) |
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>)
- Source:
- Stream.cs
- Source:
- Stream.cs
- Source:
- Stream.cs
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
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. Esto 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
Use 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 ese caso). Read devuelve 0 solo si se solicitaron cero bytes o 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). 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:
- Stream.cs
- Source:
- Stream.cs
- Source:
- Stream.cs
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. Esto 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 el final de la secuencia se ha alcanzado.
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
Use 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 offset
de . 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 aunque se hayan solicitado cero bytes, pero no se consumirán datos de la secuencia en ese caso). Read devuelve 0 solo si se solicitaron cero bytes o 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). 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.