UnmanagedMemoryStream Clase
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í.
Importante
Esta API no es conforme a CLS.
Proporciona acceso a bloques de memoria no administrados desde código administrado.
public ref class UnmanagedMemoryStream : System::IO::Stream
public class UnmanagedMemoryStream : System.IO.Stream
[System.CLSCompliant(false)]
public class UnmanagedMemoryStream : System.IO.Stream
type UnmanagedMemoryStream = class
inherit Stream
[<System.CLSCompliant(false)>]
type UnmanagedMemoryStream = class
inherit Stream
Public Class UnmanagedMemoryStream
Inherits Stream
- Herencia
- Herencia
- Derivado
- Atributos
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
Esta clase admite el acceso a la memoria no administrada mediante el modelo basado en secuencias existente y no requiere que el contenido de la memoria no administrada se copie en el montón.
Nota:
Este tipo implementa la IDisposable interfaz, pero realmente no tiene ningún recurso para eliminar. Esto significa que no es necesario eliminarlo llamando directamente a Dispose() o mediante una construcción de lenguaje como using (en C#) o Using (en Visual Basic).
Constructores
| Nombre | Description |
|---|---|
| UnmanagedMemoryStream() |
Inicializa una nueva instancia de la clase UnmanagedMemoryStream. |
| UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Inicializa una nueva instancia de la clase UnmanagedMemoryStream utilizando la ubicación especificada, la longitud de memoria, la cantidad total de memoria y los valores de acceso a archivos. |
| UnmanagedMemoryStream(Byte*, Int64) |
Inicializa una nueva instancia de la clase UnmanagedMemoryStream utilizando la ubicación y la longitud de memoria especificadas. |
| UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Inicializa una nueva instancia de la clase UnmanagedMemoryStream en un búfer seguro con un desplazamiento, una longitud y un acceso de archivo especificados. |
| UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Inicializa una nueva instancia de la clase UnmanagedMemoryStream en un búfer seguro con un desplazamiento y una longitud especificados. |
Propiedades
| Nombre | Description |
|---|---|
| CanRead |
Obtiene un valor que indica si una secuencia admite la lectura. |
| CanSeek |
Obtiene un valor que indica si una secuencia admite la búsqueda. |
| CanTimeout |
Obtiene un valor que determina si la secuencia actual puede agotar el tiempo de espera. (Heredado de Stream) |
| CanWrite |
Obtiene un valor que indica si una secuencia admite la escritura. |
| Capacity |
Obtiene la longitud del flujo (tamaño) o la cantidad total de memoria asignada a una secuencia (capacidad). |
| Length |
Obtiene la longitud de los datos de una secuencia. |
| Position |
Obtiene o establece la posición actual en una secuencia. |
| PositionPointer |
Obtiene o establece un puntero de bytes a una secuencia basada en la posición actual de la secuencia. |
| ReadTimeout |
Obtiene o establece un valor, en milisegundos, que determina cuánto tiempo intentará leer la secuencia antes de que se agote el tiempo de espera. (Heredado de Stream) |
| WriteTimeout |
Obtiene o establece un valor, en milisegundos, que determina cuánto tiempo intentará escribir la secuencia antes de que se agote el tiempo de espera. (Heredado de Stream) |
Métodos
| Nombre | Description |
|---|---|
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Inicia una operación de lectura asincrónica. (Considere la posibilidad de usar ReadAsync(Byte[], Int32, Int32) en su lugar). (Heredado de Stream) |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Comienza una operación de escritura asincrónica. (Considere la posibilidad de usar WriteAsync(Byte[], Int32, Int32) en su lugar). (Heredado de Stream) |
| Close() |
Cierra la secuencia actual y libera los recursos (como sockets y identificadores de archivo) asociados a la secuencia actual. En lugar de llamar a este método, asegúrese de que la secuencia se elimina correctamente. (Heredado de Stream) |
| CopyTo(Stream, Int32) |
Lee los bytes de la secuencia actual y los escribe en otra secuencia mediante un tamaño de búfer especificado. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
| CopyTo(Stream) |
Lee los bytes de la secuencia actual y los escribe en otra secuencia. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
| CopyToAsync(Stream, CancellationToken) |
Lee asincrónicamente los bytes de la secuencia actual y los escribe en otra secuencia, mediante un token de cancelación especificado. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
| CopyToAsync(Stream, Int32, CancellationToken) |
Lee asincrónicamente los bytes de la secuencia actual y los escribe en otra secuencia, mediante un tamaño de búfer y un token de cancelación especificados. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
| CopyToAsync(Stream, Int32) |
Lee de forma asincrónica los bytes de la secuencia actual y los escribe en otra secuencia mediante un tamaño de búfer especificado. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
| CopyToAsync(Stream) |
Lee asincrónicamente los bytes de la secuencia actual y los escribe en otra secuencia. Ambas posiciones de secuencias están avanzadas por el número de bytes copiados. (Heredado de Stream) |
| CreateObjRef(Type) |
Crea un objeto que contiene toda la información pertinente necesaria para generar un proxy usado para comunicarse con un objeto remoto. (Heredado de MarshalByRefObject) |
| CreateWaitHandle() |
Obsoletos.
Asigna un WaitHandle objeto . (Heredado de Stream) |
| Dispose() |
Libera todos los recursos usados por .Stream (Heredado de Stream) |
| Dispose(Boolean) |
Libera los recursos no administrados utilizados por UnmanagedMemoryStream y, opcionalmente, libera los recursos administrados. |
| DisposeAsync() |
Libera de forma asincrónica los recursos no administrados usados por .Stream (Heredado de Stream) |
| EndRead(IAsyncResult) |
Espera a que se complete la lectura asincrónica pendiente. (Considere la posibilidad de usar ReadAsync(Byte[], Int32, Int32) en su lugar). (Heredado de Stream) |
| EndWrite(IAsyncResult) |
Finaliza una operación de escritura asincrónica. (Considere la posibilidad de usar WriteAsync(Byte[], Int32, Int32) en su lugar). (Heredado de Stream) |
| Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
| Flush() |
Invalida el Flush() método para que no se realice ninguna acción. |
| FlushAsync() |
Borra de forma asincrónica todos los búferes de esta secuencia y hace que los datos almacenados en búfer se escriban en el dispositivo subyacente. (Heredado de Stream) |
| FlushAsync(CancellationToken) |
Invalida el FlushAsync(CancellationToken) método para que la operación se cancele si se especifica, pero no se realiza ninguna otra acción. |
| FlushAsync(CancellationToken) |
Borra de forma asincrónica todos los búferes de esta secuencia, hace que los datos almacenados en búfer se escriban en el dispositivo subyacente y supervisa las solicitudes de cancelación. (Heredado de Stream) |
| GetHashCode() |
Actúa como la función hash predeterminada. (Heredado de Object) |
| GetLifetimeService() |
Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia. (Heredado de MarshalByRefObject) |
| GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
| Initialize(Byte*, Int64, Int64, FileAccess) |
Inicializa una nueva instancia de la UnmanagedMemoryStream clase mediante un puntero a una ubicación de memoria no administrada. |
| Initialize(SafeBuffer, Int64, Int64, FileAccess) |
Inicializa una nueva instancia de la clase UnmanagedMemoryStream en un búfer seguro con un desplazamiento, una longitud y un acceso de archivo especificados. |
| InitializeLifetimeService() |
Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia. (Heredado de MarshalByRefObject) |
| MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
| MemberwiseClone(Boolean) |
Crea una copia superficial del objeto actual MarshalByRefObject . (Heredado de MarshalByRefObject) |
| ObjectInvariant() |
Obsoletos.
Proporciona compatibilidad con .Contract (Heredado de Stream) |
| Read(Byte[], Int32, Int32) |
Lee el número especificado de bytes en la matriz especificada. |
| Read(Span<Byte>) |
Lee todos los bytes de esta secuencia de memoria no administrada en el intervalo de bytes especificado. |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Lee de forma asincrónica el número especificado de bytes en la matriz especificada. |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Lee de forma asincrónica una secuencia de bytes de la secuencia actual, avanza la posición dentro de la secuencia por el número de bytes leídos y supervisa las solicitudes de cancelación. (Heredado de Stream) |
| ReadAsync(Byte[], Int32, Int32) |
Lee de forma asincrónica una secuencia de bytes de la secuencia actual y avanza la posición dentro de la secuencia por el número de bytes leídos. (Heredado de Stream) |
| ReadAsync(Memory<Byte>, CancellationToken) |
Lee asincrónicamente los bytes de flujo de memoria no administrados en la región de memoria. |
| ReadByte() |
Lee un byte de una secuencia y avanza la posición dentro de la secuencia por un byte, o devuelve -1 si está al final de la secuencia. |
| Seek(Int64, SeekOrigin) |
Establece la posición actual de la secuencia actual en el valor especificado. |
| SetLength(Int64) |
Establece la longitud de una secuencia en un valor especificado. |
| ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |
| Write(Byte[], Int32, Int32) |
Escribe un bloque de bytes en el flujo actual mediante datos de un búfer. |
| Write(ReadOnlySpan<Byte>) |
Escribe un bloque de bytes en el flujo de memoria no administrado actual mediante datos del intervalo de bytes proporcionado. |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Escribe de forma asincrónica una secuencia de bytes en la secuencia actual, avanza la posición actual dentro de esta secuencia por el número de bytes escritos y supervisa las solicitudes de cancelación. |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Escribe de forma asincrónica una secuencia de bytes en la secuencia actual, avanza la posición actual dentro de esta secuencia por el número de bytes escritos y supervisa las solicitudes de cancelación. (Heredado de Stream) |
| WriteAsync(Byte[], Int32, Int32) |
Escribe de forma asincrónica una secuencia de bytes en la secuencia actual y avanza la posición actual dentro de esta secuencia por el número de bytes escritos. (Heredado de Stream) |
| WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Escribe de forma asincrónica un intervalo de bytes en la secuencia actual, avanza la posición actual dentro de esta secuencia por el número de bytes escritos y supervisa las solicitudes de cancelación. |
| WriteByte(Byte) |
Escribe un byte en la posición actual en la secuencia de archivos. |
Métodos de extensión
| Nombre | Description |
|---|---|
| AsInputStream(Stream) |
Convierte una secuencia administrada en .NET para aplicaciones de la Tienda Windows en un flujo de entrada en Windows Runtime. |
| AsOutputStream(Stream) |
Convierte una secuencia administrada en .NET para aplicaciones de la Tienda Windows en un flujo de salida en Windows Runtime. |
| AsRandomAccessStream(Stream) |
Convierte la secuencia especificada en una secuencia de acceso aleatorio. |
| ConfigureAwait(IAsyncDisposable, Boolean) |
Configura cómo se realizarán las esperas en las tareas devueltas desde un descartable asincrónico. |