MemoryStream Classe

Definição

Cria um fluxo cujo repositório de backup é a memória.

public ref class MemoryStream : System::IO::Stream
public class MemoryStream : System.IO.Stream
[System.Serializable]
public class MemoryStream : System.IO.Stream
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class MemoryStream : System.IO.Stream
type MemoryStream = class
    inherit Stream
[<System.Serializable>]
type MemoryStream = class
    inherit Stream
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type MemoryStream = class
    inherit Stream
Public Class MemoryStream
Inherits Stream
Herança
MemoryStream
Herança
Atributos

Exemplos

O exemplo de código a seguir mostra como ler e gravar dados usando a memória como um repositório de backup.

using System;
using System.IO;
using System.Text;

class MemStream
{
    static void Main()
    {
        int count;
        byte[] byteArray;
        char[] charArray;
        UnicodeEncoding uniEncoding = new UnicodeEncoding();

        // Create the data to write to the stream.
        byte[] firstString = uniEncoding.GetBytes(
            "Invalid file path characters are: ");
        byte[] secondString = uniEncoding.GetBytes(
            Path.GetInvalidPathChars());

        using(MemoryStream memStream = new MemoryStream(100))
        {
            // Write the first string to the stream.
            memStream.Write(firstString, 0 , firstString.Length);

            // Write the second string to the stream, byte by byte.
            count = 0;
            while(count < secondString.Length)
            {
                memStream.WriteByte(secondString[count++]);
            }

            // Write the stream properties to the console.
            Console.WriteLine(
                "Capacity = {0}, Length = {1}, Position = {2}\n",
                memStream.Capacity.ToString(),
                memStream.Length.ToString(),
                memStream.Position.ToString());

            // Set the position to the beginning of the stream.
            memStream.Seek(0, SeekOrigin.Begin);

            // Read the first 20 bytes from the stream.
            byteArray = new byte[memStream.Length];
            count = memStream.Read(byteArray, 0, 20);

            // Read the remaining bytes, byte by byte.
            while(count < memStream.Length)
            {
                byteArray[count++] = (byte)memStream.ReadByte();
            }

            // Decode the byte array into a char array
            // and write it to the console.
            charArray = new char[uniEncoding.GetCharCount(
                byteArray, 0, count)];
            uniEncoding.GetDecoder().GetChars(
                byteArray, 0, count, charArray, 0);
            Console.WriteLine(charArray);
        }
    }
}
Imports System.IO
Imports System.Text

Module MemStream

    Sub Main()
    
        Dim count As Integer
        Dim byteArray As Byte()
        Dim charArray As Char()
        Dim uniEncoding As New UnicodeEncoding()

        ' Create the data to write to the stream.
        Dim firstString As Byte() = _
            uniEncoding.GetBytes("Invalid file path characters are: ")
        Dim secondString As Byte() = _
            uniEncoding.GetBytes(Path.GetInvalidPathChars())

        Dim memStream As New MemoryStream(100)
        Try
            ' Write the first string to the stream.
            memStream.Write(firstString, 0 , firstString.Length)

            ' Write the second string to the stream, byte by byte.
            count = 0
            While(count < secondString.Length)
                memStream.WriteByte(secondString(count))
                count += 1
            End While
            
            ' Write the stream properties to the console.
            Console.WriteLine( _
                "Capacity = {0}, Length = {1}, Position = {2}", _
                memStream.Capacity.ToString(), _
                memStream.Length.ToString(), _
                memStream.Position.ToString())

            ' Set the stream position to the beginning of the stream.
            memStream.Seek(0, SeekOrigin.Begin)

            ' Read the first 20 bytes from the stream.
            byteArray = _
                New Byte(CType(memStream.Length, Integer)){}
            count = memStream.Read(byteArray, 0, 20)

            ' Read the remaining Bytes, Byte by Byte.
            While(count < memStream.Length)
                byteArray(count) = _
                    Convert.ToByte(memStream.ReadByte())
                count += 1
            End While

            ' Decode the Byte array into a Char array 
            ' and write it to the console.
            charArray = _
                New Char(uniEncoding.GetCharCount( _
                byteArray, 0, count)){}
            uniEncoding.GetDecoder().GetChars( _
                byteArray, 0, count, charArray, 0)
            Console.WriteLine(charArray)
        Finally
            memStream.Close()
        End Try

    End Sub
End Module

Comentários

A posição atual de um fluxo é a posição na qual a próxima operação de leitura ou gravação pode ocorrer. A posição atual pode ser recuperada ou definida por meio do Seek método. Quando uma nova instância é MemoryStream criada, a posição atual é definida como zero.

Note

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

Fluxos de memória criados com uma matriz de bytes sem sinal fornecem um fluxo não redimensionável dos dados. Ao usar uma matriz de bytes, você não pode acrescentar nem reduzir o fluxo, embora possa modificar o conteúdo existente dependendo dos parâmetros passados para o construtor. Fluxos de memória vazios são redimensionáveis e podem ser gravados e lidos.

Se um MemoryStream objeto for adicionado a um arquivo ResX ou a um arquivo .resources, chame o GetStream método em runtime para recuperá-lo.

Se um MemoryStream objeto for serializado em um arquivo de recurso, ele será realmente serializado como um UnmanagedMemoryStream. Esse comportamento fornece melhor desempenho, bem como a capacidade de obter um ponteiro para os dados diretamente, sem precisar passar pelos Stream métodos.

Construtores

Nome Description
MemoryStream()

Inicializa uma nova instância da MemoryStream classe com uma capacidade expansível inicializada como zero.

MemoryStream(Byte[], Boolean)

Inicializa uma nova instância não redimensionável da MemoryStream classe com base na matriz de bytes especificada com a CanWrite propriedade definida conforme especificado.

MemoryStream(Byte[], Int32, Int32, Boolean, Boolean)

Inicializa uma nova instância da MemoryStream classe com base na região especificada de uma matriz de bytes, com a CanWrite propriedade definida como especificada e a capacidade de chamar GetBuffer() definida conforme especificado.

MemoryStream(Byte[], Int32, Int32, Boolean)

Inicializa uma nova instância não redimensionável da MemoryStream classe com base na região especificada de uma matriz de bytes, com a CanWrite propriedade definida conforme especificado.

MemoryStream(Byte[], Int32, Int32)

Inicializa uma nova instância não redimensionável da MemoryStream classe com base na região (índice) especificada de uma matriz de bytes.

MemoryStream(Byte[])

Inicializa uma nova instância não redimensionável da MemoryStream classe com base na matriz de bytes especificada.

MemoryStream(Int32)

Inicializa uma nova instância da MemoryStream classe com uma capacidade expansível inicializada conforme especificado.

Propriedades

Nome Description
CanRead

Obtém um valor que indica se o fluxo atual dá suporte à leitura.

CanSeek

Obtém um valor que indica se o fluxo atual 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 o fluxo atual dá suporte à gravação.

Capacity

Obtém ou define o número de bytes alocados para esse fluxo.

Length

Obtém o comprimento do fluxo em bytes.

Position

Obtém ou define a posição atual dentro do 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

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

Inicia uma operação de leitura assíncrona. (Considere usar ReadAsync(Byte[], Int32, Int32, CancellationToken) em vez disso.)

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, CancellationToken) em vez disso.)

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 para leitura e gravação.

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, Int32)

Lê os bytes do fluxo de memória atual e os grava em outro fluxo, usando um tamanho de buffer especificado.

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)
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)
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, CancellationToken)

Lê de forma assíncrona todos os bytes do fluxo atual e os grava em outro fluxo, usando um token de cancelamento e tamanho de buffer especificado.

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)
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)

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)
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.

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 pela MemoryStream classe 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, CancellationToken) em vez disso.)

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, CancellationToken) em vez disso.)

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 Flush() método 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)

Limpa de forma assíncrona todos os buffers para esse fluxo e monitora solicitações de cancelamento.

GetBuffer()

Retorna a matriz de bytes não assinados dos quais esse fluxo foi criado.

GetHashCode()

Serve como a função hash predefinida.

(Herdado de Object)
GetLifetimeService()

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)
InitializeLifetimeService()

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 atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
ObjectInvariant()

Esta API dá suporte à infraestrutura do produto e não deve ser usada diretamente do seu código.

Fornece suporte para um Contract.

ObjectInvariant()
Obsoleto.

Fornece suporte para um Contract.

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

Lê um bloco de bytes do fluxo atual e grava os dados em um buffer.

Read(Span<Byte>)

Lê uma sequência de bytes do fluxo de memória atual e avança a posição dentro do fluxo de memória pelo número de bytes lidos.

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.

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(Memory<Byte>, CancellationToken)

Lê de forma assíncrona uma sequência de bytes do fluxo de memória atual, grava a sequência destination, avança a posição dentro do fluxo de memória pelo número de bytes lidos e monitora solicitações de cancelamento.

ReadByte()

Lê um byte do fluxo atual.

Seek(Int64, SeekOrigin)

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

SetLength(Int64)

Define o comprimento do fluxo atual como o valor especificado.

ToArray()

Grava o conteúdo do fluxo em uma matriz de bytes, independentemente da Position propriedade.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
TryGetBuffer(ArraySegment<Byte>)

Retorna a matriz de bytes não assinados dos quais esse fluxo foi criado. O valor retornado indica se a conversão foi bem-sucedida.

Write(Byte[], Int32, Int32)

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

Write(ReadOnlySpan<Byte>)

Grava a sequência de bytes contidos no source fluxo de memória atual e avança a posição atual dentro desse fluxo de memória pelo número de bytes gravados.

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)

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(ReadOnlyMemory<Byte>, CancellationToken)

Grava de forma assíncrona a sequência de bytes contidos no source fluxo de memória atual, avança a posição atual dentro desse fluxo de memória pelo número de bytes gravados e monitora solicitações de cancelamento.

WriteByte(Byte)

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

WriteTo(Stream)

Grava todo o conteúdo desse fluxo de memória em outro fluxo.

Implantações explícitas de interface

Nome Description
IDisposable.Dispose()

Libera todos os recursos usados pelo Stream.

(Herdado de Stream)

Métodos de Extensão

Nome Description
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.

GetWindowsRuntimeBuffer(MemoryStream, Int32, Int32)

Retorna um Windows. Interface Storage.Streams.IBuffer que representa uma região dentro da memória que o fluxo de memória especificado representa.

GetWindowsRuntimeBuffer(MemoryStream)

Retorna um Windows. Interface Storage.Streams.IBuffer que representa a mesma memória do fluxo de memória especificado.

Aplica-se a

Confira também