UnmanagedMemoryStream Classe

Definição

Importante

Esta API não está em conformidade com CLS.

Fornece acesso aos blocos de memória não gerenciados a partir de código gerenciado.

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
Herança
UnmanagedMemoryStream
Herança
UnmanagedMemoryStream
Derivado
Atributos

Exemplos

O exemplo de código a seguir demonstra como ler e gravar em memória não gerenciada usando a UnmanagedMemoryStream classe. Um bloco de memória não gerenciada é alocado e desalocado usando a Marshal classe.


// 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();
    }
}

Comentários

Essa classe dá suporte ao acesso à memória não gerenciada usando o modelo baseado em fluxo existente e não exige que o conteúdo na memória não gerenciada seja copiado para o heap.

Observação

Esse tipo implementa a interface IDisposable, mas, na verdade, não tem todos os recursos para descarte. Isso significa que não é necessário descartá-lo chamando diretamente Dispose() ou usando um constructo de linguagem como using (em C#) ou Using (em Visual Basic).

Construtores

UnmanagedMemoryStream()

Inicializa uma nova instância da classe UnmanagedMemoryStream.

UnmanagedMemoryStream(Byte*, Int64)

Inicializa uma nova instância da classe UnmanagedMemoryStream usando o tamanho da memória e o local especificados.

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

Inicializa uma nova instância da classe UnmanagedMemoryStream usando o local, o tamanho da memória, a quantidade total de memória e os valores de acesso ao arquivo.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Inicializa uma nova instância da classe UnmanagedMemoryStream em um buffer seguro com deslocamento e comprimento especificados.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

Inicializa uma nova instância da classe UnmanagedMemoryStream em um buffer seguro com um deslocamento, tamanho e acesso a arquivos especificados.

Propriedades

CanRead

Obtém um valor que indica se um fluxo oferece suporte à leitura.

CanSeek

Obtém um valor que indica se um fluxo oferece suporte à busca.

CanTimeout

Obtém um valor que determina se o fluxo atual pode atingir o tempo limite.

(Herdado de Stream)
CanWrite

Obtém um valor que indica se um fluxo oferece suporte à gravação.

Capacity

Obtém o comprimento do fluxo (tamanho) ou a quantidade total de memória atribuída a um fluxo (capacidade).

Length

Obtém o comprimento dos dados em um fluxo.

Position

Obtém ou define a posição atual em um fluxo.

PositionPointer

Obtém ou define um ponteiro de bytes em um fluxo com base na posição atual no fluxo.

ReadTimeout

Obtém ou define um valor, em milissegundos, que determina por quanto tempo o fluxo tentará realizar a leitura antes do tempo limite.

(Herdado de Stream)
WriteTimeout

Obtém ou define um valor, em milissegundos, que determina por quanto tempo o fluxo tentará realizar a gravação antes do tempo limite.

(Herdado de Stream)

Métodos

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Inicia uma operação de leitura assíncrona. (Considere o uso de ReadAsync(Byte[], Int32, Int32) em seu lugar.)

(Herdado de Stream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Inicia uma operação de gravação assíncrona. (Considere o uso de WriteAsync(Byte[], Int32, Int32) em seu lugar.)

(Herdado de Stream)
Close()

Fecha o fluxo atual e libera todos os recursos (como soquetes e identificadores de arquivos) associados ao fluxo atual. Em vez de chamar esse método, verifique se o fluxo é descartado corretamente.

(Herdado de Stream)
CopyTo(Stream)

Lê os bytes do fluxo atual e os grava em outro fluxo. Ambas as posições de fluxo são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyTo(Stream, Int32)

Lê os bytes do fluxo atual e os grava em outro fluxo usando um tamanho do buffer especificado. Ambas as posições de fluxo são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream)

Lê de forma assíncrona os bytes do fluxo atual e os grava em outro fluxo. Ambas as posições de fluxo são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream, CancellationToken)

Lê de forma assíncrona os bytes do fluxo atual e os grava em outro fluxo usando um token de cancelamento especificado. Ambas as posições de fluxo são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream, Int32)

Lê de maneira assíncrona os bytes do fluxo atual e os grava em outro fluxo usando um tamanho do buffer especificado. Ambas as posições de fluxo são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Lê de forma assíncrona os bytes do fluxo atual e os grava em outro fluxo usando um tamanho do buffer especificado e um token de cancelamento. Ambas as posições de fluxo são avançadas pelo número de bytes copiados.

(Herdado de Stream)
CreateObjRef(Type)

Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
CreateWaitHandle()
Obsoleto.
Obsoleto.

Aloca um objeto WaitHandle.

(Herdado de Stream)
Dispose()

Libera todos os recursos usados pelo Stream.

(Herdado de Stream)
Dispose(Boolean)

Libera os recursos não gerenciados usados pelo UnmanagedMemoryStream e opcionalmente libera os recursos gerenciados.

DisposeAsync()

Libera de forma assíncrona os recursos não gerenciados usados pelo Stream.

(Herdado de Stream)
EndRead(IAsyncResult)

Espera a leitura assíncrona pendente ser concluída. (Considere o uso de ReadAsync(Byte[], Int32, Int32) em seu lugar.)

(Herdado de Stream)
EndWrite(IAsyncResult)

Encerra uma operação de gravação assíncrona. (Considere o uso de WriteAsync(Byte[], Int32, Int32) em seu lugar.)

(Herdado de Stream)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Flush()

Substitui o método Flush() para que nenhuma ação seja executada.

FlushAsync()

Limpa de forma assíncrona todos os buffers nesse fluxo e faz com que os dados armazenados em buffer sejam gravados no dispositivo subjacente.

(Herdado de Stream)
FlushAsync(CancellationToken)

Substitui o método FlushAsync(CancellationToken) para que a operação seja cancelada se especificado, mas nenhuma outra ação seja executada.

FlushAsync(CancellationToken)

Limpa todos os buffers nesse fluxo de forma assíncrona, faz com que os dados armazenados em buffer sejam gravados no dispositivo subjacente e monitora as solicitações de cancelamento.

(Herdado de Stream)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetLifetimeService()
Obsoleto.

Recupera o objeto de serviço de tempo de vida atual que controla a política de ciclo de vida para esta instância.

(Herdado de MarshalByRefObject)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
Initialize(Byte*, Int64, Int64, FileAccess)

Inicializa uma nova instância da classe UnmanagedMemoryStream usando um ponteiro para um local de memória não gerenciada.

Initialize(SafeBuffer, Int64, Int64, FileAccess)

Inicializa uma nova instância da classe UnmanagedMemoryStream em um buffer seguro com um deslocamento, tamanho e acesso a arquivos especificados.

InitializeLifetimeService()
Obsoleto.

Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida para essa instância.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto MarshalByRefObject atual.

(Herdado de MarshalByRefObject)
ObjectInvariant()
Obsoleto.

Oferece suporte a um Contract.

(Herdado de Stream)
Read(Byte[], Int32, Int32)

Lê o número de bytes especificado na matriz especificada.

Read(Span<Byte>)

Lê todos os bytes desse fluxo de memória não gerenciado no intervalo especificado de bytes.

Read(Span<Byte>)

Quando for substituído em uma classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo até o número de bytes lidos.

(Herdado de Stream)
ReadAsync(Byte[], Int32, Int32)

Lê uma sequência de bytes do fluxo atual de forma assíncrona e avança a posição no fluxo até o número de bytes lidos.

(Herdado de Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Lê de forma assíncrona o número de bytes especificado na matriz especificada.

ReadAsync(Byte[], Int32, Int32, CancellationToken)

Lê de forma assíncrona uma sequência de bytes do fluxo atual, avança a posição no fluxo até o número de bytes lidos e monitora as solicitações de cancelamento.

(Herdado de Stream)
ReadAsync(Memory<Byte>, CancellationToken)

Lê de forma assíncrona os bytes de fluxo de memória não gerenciado na região de memória.

ReadAsync(Memory<Byte>, CancellationToken)

Lê de forma assíncrona uma sequência de bytes do fluxo atual, avança a posição no fluxo até o número de bytes lidos e monitora as solicitações de cancelamento.

(Herdado de Stream)
ReadByte()

Lê um byte de um fluxo e avança a posição no fluxo em um byte ou retorna -1 caso esteja no final do fluxo.

Seek(Int64, SeekOrigin)

Define a posição atual do fluxo atual como o valor determinado.

SetLength(Int64)

Define o comprimento de um fluxo como um valor especificado.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
Write(Byte[], Int32, Int32)

Grava um bloco de bytes no fluxo atual usando os dados de um buffer.

Write(ReadOnlySpan<Byte>)

Grava um bloco de bytes no fluxo de memória não gerenciado atual usando dados do intervalo de bytes fornecido.

Write(ReadOnlySpan<Byte>)

Quando for substituído em uma classe derivada, grava uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo até o número de bytes gravados.

(Herdado de Stream)
WriteAsync(Byte[], Int32, Int32)

Grava assincronamente uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo no número de bytes gravados.

(Herdado de Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Grava uma sequência de bytes no fluxo atual assincronamente, avança a posição atual dentro desse fluxo pelo número de bytes gravados e monitora as solicitações de cancelamento.

WriteAsync(Byte[], Int32, Int32, CancellationToken)

Grava uma sequência de bytes no fluxo atual assincronamente, avança a posição atual dentro desse fluxo pelo número de bytes gravados e monitora as solicitações de cancelamento.

(Herdado de Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Grava de forma assíncrona um intervalo de bytes no fluxo atual, avança a posição atual nesse fluxo até o número de bytes gravados e monitora as solicitações de cancelamento.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Grava uma sequência de bytes no fluxo atual assincronamente, avança a posição atual dentro desse fluxo pelo número de bytes gravados e monitora as solicitações de cancelamento.

(Herdado de Stream)
WriteByte(Byte)

Grava um byte na posição atual no fluxo de arquivos.

Métodos de Extensão

AsInputStream(Stream)

Converte um fluxo gerenciado no .NET para Aplicativos da Windows Store em um fluxo de entrada no Windows Runtime.

AsOutputStream(Stream)

Converte um fluxo gerenciado no .NET para Aplicativos da Windows Store em um fluxo de saída no Windows Runtime.

AsRandomAccessStream(Stream)

Converte o fluxo especificado em um fluxo de acesso aleatório.

ConfigureAwait(IAsyncDisposable, Boolean)

Configura como as esperas nas tarefas retornadas de um descartável assíncrono são realizadas.

Aplica-se a