UnmanagedMemoryStream.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>) |
Lee todos los bytes de esta secuencia de memoria no administrada en el intervalo de bytes especificado. |
Read(Byte[], Int32, Int32) |
Lee el número especificado de bytes y los introduce en la matriz especificada. |
Read(Span<Byte>)
- Source:
- UnmanagedMemoryStream.cs
- Source:
- UnmanagedMemoryStream.cs
- Source:
- UnmanagedMemoryStream.cs
Lee todos los bytes de esta secuencia de memoria no administrada en el intervalo de bytes especificado.
public:
override int Read(Span<System::Byte> destination);
public:
override int Read(Span<System::Byte> buffer);
public override int Read (Span<byte> destination);
public override int Read (Span<byte> buffer);
override this.Read : Span<byte> -> int
override this.Read : Span<byte> -> int
Public Overrides Function Read (destination As Span(Of Byte)) As Integer
Public Overrides Function Read (buffer As Span(Of Byte)) As Integer
Parámetros
Cuando este método finaliza, este intervalo contiene todos los bytes de la secuencia de memoria no administrada.
Devoluciones
Número total de bytes leídos en el destino.
Se aplica a
Read(Byte[], Int32, Int32)
- Source:
- UnmanagedMemoryStream.cs
- Source:
- UnmanagedMemoryStream.cs
- Source:
- UnmanagedMemoryStream.cs
Lee el número especificado de bytes y los introduce en la matriz especificada.
public:
override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer
Parámetros
- buffer
- Byte[]
Cuando este método devuelve un valor, contiene la matriz de bytes especificada con los valores entre offset
y (offset
+ count
- 1) reemplazados por los bytes leídos desde el origen actual. Este parámetro se pasa sin inicializar.
- 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 van a 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 solicitado si dicho número no está disponible, o puede ser cero (0) si se alcanza el final de la secuencia.
Excepciones
La secuencia está cerrada.
La memoria subyacente no admite operaciones de lectura.
o bien
La propiedad CanRead se establece en false
.
El parámetro buffer
debe establecerse en null
.
El parámetro offset
es menor que cero.
O bien
El parámetro count
es menor que cero.
La longitud de la matriz de búferes menos el parámetro offset
es menor que el parámetro count
.
Ejemplos
En el ejemplo de código siguiente se muestra cómo leer y escribir en memoria no administrada mediante la UnmanagedMemoryStream clase . Se asigna un bloque de memoria no administrada y se desasigna mediante la Marshal clase .
// Note: you must compile this sample using the unsafe flag.
// From the command line, type the following: csc sample.cs /unsafe
using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
unsafe class TestWriter
{
static void Main()
{
// Create some data to read and write.
byte[] message = UnicodeEncoding.Unicode.GetBytes("Here is some data.");
// Allocate a block of unmanaged memory and return an IntPtr object.
IntPtr memIntPtr = Marshal.AllocHGlobal(message.Length);
// Get a byte pointer from the IntPtr object.
byte* memBytePtr = (byte*)memIntPtr.ToPointer();
// Create an UnmanagedMemoryStream object using a pointer to unmanaged memory.
UnmanagedMemoryStream writeStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Write);
// Write the data.
writeStream.Write(message, 0, message.Length);
// Close the stream.
writeStream.Close();
// Create another UnmanagedMemoryStream object using a pointer to unmanaged memory.
UnmanagedMemoryStream readStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Read);
// Create a byte array to hold data from unmanaged memory.
byte[] outMessage = new byte[message.Length];
// Read from unmanaged memory to the byte array.
readStream.Read(outMessage, 0, message.Length);
// Close the stream.
readStream.Close();
// Display the data to the console.
Console.WriteLine(UnicodeEncoding.Unicode.GetString(outMessage));
// Free the block of unmanaged memory.
Marshal.FreeHGlobal(memIntPtr);
Console.ReadLine();
}
}
Comentarios
El offset
parámetro proporciona el desplazamiento del byte en el array
parámetro (el índice del búfer) en el que se va a empezar a leer y el count
parámetro proporciona el número máximo de bytes que se van a leer desde esta secuencia. El valor devuelto es el número real de bytes leídos o cero si se alcanza el final de la secuencia. Si la operación de lectura se realiza correctamente, la posición actual de la secuencia está avanzada por el número de bytes leídos. Si se produce una excepción, la posición actual de la secuencia no cambia.
El Read método devuelve cero solo después de alcanzar el final de la secuencia. De lo contrario, Read siempre lee al menos un byte de la secuencia antes de devolverlo. Si no hay datos disponibles desde la secuencia tras una llamada a Read, el método se bloqueará hasta que se pueda devolver al menos un byte de datos. Una implementación es libre para devolver menos bytes de los solicitados incluso si no se ha alcanzado el final de la secuencia.