UnmanagedMemoryStream.Read Método

Definición

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

destinationbuffer
Span<Byte>

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.

Se aplica a