UnmanagedMemoryStream Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Importante
Esta API não está em conformidade com CLS.
Fornece acesso a blocos de memória não geridos a partir de código gerido.
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 seguinte demonstra como ler e escrever na memória não gerida usando a UnmanagedMemoryStream classe. Um bloco de memória não gerida é 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();
}
}
Observações
Esta classe suporta o acesso à memória não gerida usando o modelo existente baseado em fluxos e não exige que o conteúdo da memória não gerida seja copiado para o heap.
Note
Este tipo implementa a IDisposable interface, mas na verdade não tem recursos para eliminar. Isto significa que não é necessário eliminá-lo chamando diretamente Dispose() ou usando uma construção de linguagem como using (em C#) ou Using (em Visual Basic).
Construtores
| Name | Description |
|---|---|
| UnmanagedMemoryStream() |
Inicializa uma nova instância da UnmanagedMemoryStream classe. |
| UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Inicializa uma nova instância da UnmanagedMemoryStream classe usando a localização especificada, comprimento de memória, quantidade total de memória e valores de acesso a ficheiros. |
| UnmanagedMemoryStream(Byte*, Int64) |
Inicializa uma nova instância da UnmanagedMemoryStream classe usando a localização e comprimento de memória especificados. |
| UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Inicializa uma nova instância da UnmanagedMemoryStream classe num buffer seguro com um offset, comprimento e acesso ao ficheiro especificados. |
| UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Inicializa uma nova instância da UnmanagedMemoryStream classe num buffer seguro com um offset e comprimento especificados. |
Propriedades
| Name | Description |
|---|---|
| CanRead |
Recebe um valor que indica se um fluxo suporta leitura. |
| CanSeek |
Recebe um valor que indica se um fluxo suporta a procura. |
| CanTimeout |
Obtém um valor que determina se o fluxo atual pode expirar. (Herdado de Stream) |
| CanWrite |
Recebe um valor que indica se um fluxo suporta escrita. |
| 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 num fluxo. |
| Position |
Obtém ou define a posição atual num fluxo. |
| PositionPointer |
Obtém ou define um ponteiro de byte para um fluxo com base na posição atual no fluxo. |
| ReadTimeout |
Recebe ou define um valor, em milissegundos, que determina quanto tempo o fluxo tentará ler antes de expirar. (Herdado de Stream) |
| WriteTimeout |
Recebe ou define um valor, em milissegundos, que determina quanto tempo o fluxo tenta escrever antes de expirar. (Herdado de Stream) |
Métodos
| Name | Description |
|---|---|
| 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 escrita assíncrona. (Considere usar WriteAsync(Byte[], Int32, Int32) em vez disso.) (Herdado de Stream) |
| Close() |
Fecha o fluxo atual e liberta quaisquer recursos (como sockets e handles de ficheiros) associados ao fluxo atual. Em vez de chamar este método, certifique-se de que o fluxo é devidamente descartado. (Herdado de Stream) |
| CopyTo(Stream, Int32) |
Lê os bytes do fluxo atual e escreve-os noutro fluxo, usando um tamanho de buffer especificado. As posições de ambos os fluxos são avançadas pelo número de bytes copiados. (Herdado de Stream) |
| CopyTo(Stream) |
Lê os bytes do fluxo atual e escreve-os noutro fluxo. As posições de ambos os 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 escreve-os noutro fluxo, usando um token de cancelamento especificado. As posições de ambos os 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 escreve-os noutro fluxo, usando um tamanho de buffer especificado e um token de cancelamento. As posições de ambos os fluxos são avançadas pelo número de bytes copiados. (Herdado de Stream) |
| CopyToAsync(Stream, Int32) |
Lê assíncronamente os bytes do fluxo atual e escreve-os noutro fluxo, usando um tamanho de buffer especificado. As posições de ambos os 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 escreve-os noutro fluxo. As posições de ambos os fluxos são avançadas pelo número de bytes copiados. (Herdado de Stream) |
| CreateObjRef(Type) |
Cria um objeto que contém toda a informação relevante necessária para gerar um proxy usado para comunicar com um objeto remoto. (Herdado de MarshalByRefObject) |
| CreateWaitHandle() |
Obsoleto.
Aloca um WaitHandle objeto. (Herdado de Stream) |
| Dispose() |
Liberta todos os recursos utilizados pelo Stream. (Herdado de Stream) |
| Dispose(Boolean) |
Liberta os recursos não geridos usados pelo UnmanagedMemoryStream e opcionalmente liberta os recursos geridos. |
| DisposeAsync() |
De forma assíncrona, liberta os recursos não geridos usados pelos Stream. (Herdado de Stream) |
| EndRead(IAsyncResult) |
Espera que a leitura assíncrona pendente seja concluída. (Considere usar ReadAsync(Byte[], Int32, Int32) em vez disso.) (Herdado de Stream) |
| EndWrite(IAsyncResult) |
Termina uma operação de escrita 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() |
Sobrepõe o Flush() método para que nenhuma ação seja realizada. |
| FlushAsync() |
Apaga assíncronamente todos os buffers deste fluxo e faz com que quaisquer dados armazenados sejam escritos no dispositivo subjacente. (Herdado de Stream) |
| FlushAsync(CancellationToken) |
Sobrepõe o FlushAsync(CancellationToken) método para que a operação seja cancelada se especificada, mas nenhuma outra ação é realizada. |
| FlushAsync(CancellationToken) |
Apaga assíncronamente todos os buffers deste fluxo, faz com que quaisquer dados armazenados sejam escritos no dispositivo subjacente e monitoriza os pedidos de cancelamento. (Herdado de Stream) |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetLifetimeService() |
Recupera o objeto de serviço de tempo de vida atual que controla a política de vida útil neste caso. (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 UnmanagedMemoryStream classe usando um ponteiro para uma localização de memória não gerida. |
| Initialize(SafeBuffer, Int64, Int64, FileAccess) |
Inicializa uma nova instância da UnmanagedMemoryStream classe num buffer seguro com um offset, comprimento e acesso ao ficheiro especificados. |
| InitializeLifetimeService() |
Obtém-se um objeto de serviço vitalício para controlar a apólice vitalícia neste caso. (Herdado de MarshalByRefObject) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| MemberwiseClone(Boolean) |
Cria uma cópia superficial do objeto atual MarshalByRefObject . (Herdado de MarshalByRefObject) |
| ObjectInvariant() |
Obsoleto.
Fornece suporte para um Contract. (Herdado de Stream) |
| Read(Byte[], Int32, Int32) |
Lê o número especificado de bytes no array especificado. |
| Read(Span<Byte>) |
Lê todos os bytes deste fluxo de memória não gerido no intervalo especificado de bytes. |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Lê assíncronamente o número especificado de bytes no array especificado. |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
A leitura 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 monitoriza pedidos de cancelamento. (Herdado de Stream) |
| ReadAsync(Byte[], Int32, Int32) |
A leitura 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(Memory<Byte>, CancellationToken) |
A leitura assíncrona os bytes do fluxo de memória não geridos para a região de memória. |
| ReadByte() |
Lê um byte de um fluxo e avança a posição dentro do fluxo em um byte, ou devolve -1 se estiver no final do fluxo. |
| Seek(Int64, SeekOrigin) |
Define a posição atual do fluxo atual para o valor dado. |
| SetLength(Int64) |
Define o comprimento de um fluxo para um valor especificado. |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |
| Write(Byte[], Int32, Int32) |
Escreve um bloco de bytes no fluxo atual usando dados de um buffer. |
| Write(ReadOnlySpan<Byte>) |
Escreve um bloco de bytes no fluxo de memória não gerida atual usando dados do intervalo de bytes fornecido. |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Escreve assíncronamente uma sequência de bytes no fluxo atual, avança a posição atual dentro deste fluxo pelo número de bytes escritos e monitoriza pedidos de cancelamento. |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Escreve assíncronamente uma sequência de bytes no fluxo atual, avança a posição atual dentro deste fluxo pelo número de bytes escritos e monitoriza pedidos de cancelamento. (Herdado de Stream) |
| WriteAsync(Byte[], Int32, Int32) |
Escreve assíncronamente uma sequência de bytes no fluxo atual e avança a posição atual dentro desse fluxo pelo número de bytes escritos. (Herdado de Stream) |
| WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
O Assíncrono escreve um intervalo de bytes no fluxo atual, avança a posição atual dentro deste fluxo pelo número de bytes escritos e monitoriza pedidos de cancelamento. |
| WriteByte(Byte) |
Escreve um byte na posição atual no fluxo de ficheiros. |
Métodos da Extensão
| Name | Description |
|---|---|
| AsInputStream(Stream) |
Converte um fluxo gerido nas aplicações .NET for Windows Store num fluxo de entrada no Windows Runtime. |
| AsOutputStream(Stream) |
Converte um fluxo gerido nas aplicações .NET for Windows Store num fluxo de saída no Windows Runtime. |
| AsRandomAccessStream(Stream) |
Converte o fluxo especificado num fluxo de acesso aleatório. |
| ConfigureAwait(IAsyncDisposable, Boolean) |
Configura como aguarda nas tarefas devolvidas de um descartável assíncrono será realizada. |