UnmanagedMemoryStream Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Importante
Esta API não está em conformidade com CLS.
Fornece acesso a blocos de memória não gerenciados do 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
- Herança
- Derivado
- Atributos
Exemplos
O exemplo de código a seguir demonstra como ler e gravar em memória não gerenciada usando a classe UnmanagedMemoryStream. Um bloco de memória não gerenciada é alocado e desalocado usando a classe Marshal.
// 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.
Nota
Esse tipo implementa a interface IDisposable, mas não tem recursos para descartar. Isso significa que não é necessário descartá-lo chamando diretamente Dispose() ou usando um constructo de idioma, como using
(em C#) ou Using
(no 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 local e o comprimento de memória especificados. |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Inicializa uma nova instância da classe UnmanagedMemoryStream usando o local especificado, o comprimento 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 um deslocamento e comprimento especificados. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Inicializa uma nova instância da classe UnmanagedMemoryStream em um buffer seguro com um deslocamento, comprimento e acesso a arquivos especificados. |
Propriedades
CanRead |
Obtém um valor que indica se um fluxo dá suporte à leitura. |
CanSeek |
Obtém um valor que indica se um fluxo dá suporte à busca. |
CanTimeout |
Obtém um valor que determina se o fluxo atual pode acabar. (Herdado de Stream) |
CanWrite |
Obtém um valor que indica se um fluxo dá 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 para um fluxo com base na posição atual no fluxo. |
ReadTimeout |
Obtém ou define um valor, em milissegundos, que determina quanto tempo o fluxo tentará ler antes do tempo limite. (Herdado de Stream) |
WriteTimeout |
Obtém ou define um valor, em milissegundos, que determina por quanto tempo o fluxo tentará gravar antes do tempo limite. (Herdado de Stream) |
Métodos
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Inicia uma operação de leitura assíncrona. (Considere usar ReadAsync(Byte[], Int32, Int32) em vez disso.) (Herdado de Stream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Inicia uma operação de gravação assíncrona. (Considere usar WriteAsync(Byte[], Int32, Int32) em vez disso.) (Herdado de Stream) |
Close() |
Fecha o fluxo atual e libera todos os recursos (como soquetes e identificadores de arquivo) associados ao fluxo atual. Em vez de chamar esse método, verifique se o fluxo foi descartado corretamente. (Herdado de Stream) |
CopyTo(Stream) |
Lê os bytes do fluxo atual e os grava em outro fluxo. Ambas as posições de fluxos 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 de buffer especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados. (Herdado de Stream) |
CopyToAsync(Stream) |
Lê assíncronamente os bytes do fluxo atual e os grava em outro fluxo. Ambas as posições de fluxos são avançadas pelo número de bytes copiados. (Herdado de Stream) |
CopyToAsync(Stream, CancellationToken) |
Lê assíncronamente os bytes do fluxo atual e os grava em outro fluxo, usando um token de cancelamento especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados. (Herdado de Stream) |
CopyToAsync(Stream, Int32) |
Lê de forma assíncrona os bytes do fluxo atual e os grava em outro fluxo, usando um tamanho de buffer especificado. Ambas as posições de fluxos são avançadas pelo número de bytes copiados. (Herdado de Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
Lê assíncronamente os bytes do fluxo atual e os grava em outro fluxo, usando um token de cancelamento e tamanho de buffer especificado. Ambas as posições de fluxos 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.
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) |
Aguarda a conclusão da leitura assíncrona pendente. (Considere usar ReadAsync(Byte[], Int32, Int32) em vez disso.) (Herdado de Stream) |
EndWrite(IAsyncResult) |
Encerra uma operação de gravação assíncrona. (Considere usar WriteAsync(Byte[], Int32, Int32) em vez disso.) (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 para esse fluxo e faz com que todos os dados 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 especificada, mas nenhuma outra ação é executada. |
FlushAsync(CancellationToken) |
Limpa de forma assíncrona todos os buffers para esse fluxo, faz com que todos os dados em buffer sejam gravados no dispositivo subjacente e monitora 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 tempo de vida para essa 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 gerenciado. |
Initialize(SafeBuffer, Int64, Int64, FileAccess) |
Inicializa uma nova instância da classe UnmanagedMemoryStream em um buffer seguro com um deslocamento, comprimento 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 dessa instância. (Herdado de MarshalByRefObject) |
MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
MemberwiseClone(Boolean) |
Cria uma cópia superficial do objeto MarshalByRefObject atual. (Herdado de MarshalByRefObject) |
ObjectInvariant() |
Obsoleto.
Fornece suporte para um Contract. (Herdado de Stream) |
Read(Byte[], Int32, Int32) |
Lê o número especificado de bytes na matriz especificada. |
Read(Span<Byte>) |
Lê todos os bytes desse fluxo de memória não gerenciado no intervalo de bytes especificado. |
Read(Span<Byte>) |
Quando substituído em uma classe derivada, lê uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos. (Herdado de Stream) |
ReadAsync(Byte[], Int32, Int32) |
Lê de forma assíncrona uma sequência de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos. (Herdado de Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Lê de forma assíncrona o número especificado de bytes 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 dentro do fluxo pelo número de bytes lidos e monitora 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 gerenciados na região da memória. |
ReadAsync(Memory<Byte>, CancellationToken) |
Lê de forma assíncrona uma sequência de bytes do fluxo atual, avança a posição dentro do fluxo pelo número de bytes lidos e monitora solicitações de cancelamento. (Herdado de Stream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
Lê pelo menos um número mínimo de bytes do fluxo atual e avança a posição dentro do fluxo pelo número de bytes lidos. (Herdado de Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Lê de forma assíncrona pelo menos um número mínimo de bytes do fluxo atual, avança a posição dentro do fluxo pelo número de bytes lidos e monitora solicitações de cancelamento. (Herdado de Stream) |
ReadByte() |
Lê um byte de um fluxo e avança a posição dentro do fluxo por um byte ou retorna -1 se estiver no final do fluxo. |
ReadExactly(Byte[], Int32, Int32) |
Lê |
ReadExactly(Span<Byte>) |
Lê bytes do fluxo atual e avança a posição dentro do fluxo até que a |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Lê de forma assíncrona |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Lê bytes de forma assíncrona do fluxo atual, avança a posição dentro do fluxo até que o |
Seek(Int64, SeekOrigin) |
Define a posição atual do fluxo atual como o valor fornecido. |
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 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 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 pelo número de bytes gravados. (Herdado de Stream) |
WriteAsync(Byte[], Int32, Int32) |
Grava de forma assíncrona uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo pelo número de bytes gravados. (Herdado de Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Grava de forma assíncrona uma sequência de bytes no fluxo atual, avança a posição atual dentro desse fluxo pelo número de bytes gravados e monitora solicitações de cancelamento. |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Grava de forma assíncrona uma sequência de bytes no fluxo atual, avança a posição atual dentro desse fluxo pelo número de bytes gravados e monitora 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 dentro desse fluxo pelo número de bytes gravados e monitora solicitações de cancelamento. |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Grava de forma assíncrona uma sequência de bytes no fluxo atual, avança a posição atual dentro desse fluxo pelo número de bytes gravados e monitora 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
CopyToAsync(Stream, PipeWriter, CancellationToken) |
Lê assíncronamente os bytes do Stream e os grava no PipeWriterespecificado usando um token de cancelamento. |
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 serão executadas. |