MemoryStream Classe

Definição

Cria um fluxo cujo repositório de backup é a memória.Creates a stream whose backing store is memory.

public ref class MemoryStream : System::IO::Stream
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class MemoryStream : System.IO.Stream
type MemoryStream = class
    inherit Stream
Public Class MemoryStream
Inherits Stream
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.The following code example shows how to read and write data using memory as a backing store.

using namespace System;
using namespace System::IO;
using namespace System::Text;

int main()
{
   int count;
   array<Byte>^byteArray;
   array<Char>^charArray;
   UnicodeEncoding^ uniEncoding = gcnew UnicodeEncoding;

   // Create the data to write to the stream.
   array<Byte>^firstString = uniEncoding->GetBytes( "Invalid file path characters are: " );
   array<Byte>^secondString = uniEncoding->GetBytes( Path::InvalidPathChars );

   MemoryStream^ memStream = gcnew 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++ ] );
      }

      
      // 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 stream position to the beginning of the stream.
      memStream->Seek( 0, SeekOrigin::Begin );

      // Read the first 20 bytes from the stream.
      byteArray = gcnew array<Byte>(memStream->Length);
      count = memStream->Read( byteArray, 0, 20 );

      // Read the remaining bytes, byte by byte.
      while ( count < memStream->Length )
      {
         byteArray[ count++ ] = Convert::ToByte( memStream->ReadByte() );
      }
      
      // Decode the Byte array into a Char array 
      // and write it to the console.
      charArray = gcnew array<Char>(uniEncoding->GetCharCount( byteArray, 0, count ));
      uniEncoding->GetDecoder()->GetChars( byteArray, 0, count, charArray, 0 );
      Console::WriteLine( charArray );
   }
   finally
   {
      memStream->Close();
   }
}
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++] =
                    Convert.ToByte(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 em que a próxima operação de leitura ou gravação pode ocorrer.The current position of a stream is the position at which the next read or write operation could take place. A posição atual pode ser recuperada ou definida por meio do método Seek.The current position can be retrieved or set through the Seek method. Quando uma nova instância de MemoryStream é criada, a posição atual é definida como zero.When a new instance of MemoryStream is created, the current position is set to zero.

Observação

Esse tipo implementa a interface IDisposable, mas, na verdade, não tem todos os recursos para descarte.This type implements the IDisposable interface, but does not actually have any resources to dispose. 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).This means that disposing it by directly calling Dispose() or by using a language construct such as using (in C#) or Using (in Visual Basic) is not necessary.

Os fluxos de memória criados com uma matriz de bytes não assinado fornecem um fluxo não redimensionável dos dados.Memory streams created with an unsigned byte array provide a non-resizable stream of the data. Ao usar uma matriz de bytes, não é possível anexar nem reduzir o fluxo, embora você possa modificar o conteúdo existente dependendo dos parâmetros passados para o construtor.When using a byte array, you can neither append to nor shrink the stream, although you might be able to modify the existing contents depending on the parameters passed into the constructor. Os fluxos de memória vazios são redimensionáveis e podem ser gravados e lidos.Empty memory streams are resizable, and can be written to and read from.

Se um objeto MemoryStream for adicionado a um arquivo ResX ou um arquivo. Resources, chame o método GetStream em tempo de execução para recuperá-lo.If a MemoryStream object is added to a ResX file or a .resources file, call the GetStream method at runtime to retrieve it.

Se um objeto MemoryStream for serializado em um arquivo de recurso, ele será, na verdade, serializado como um UnmanagedMemoryStream.If a MemoryStream object is serialized to a resource file it will actually be serialized as an UnmanagedMemoryStream. Esse comportamento fornece melhor desempenho, bem como a capacidade de obter um ponteiro para os dados diretamente, sem precisar passar pelos métodos Stream.This behavior provides better performance, as well as the ability to get a pointer to the data directly, without having to go through Stream methods.

Construtores

MemoryStream()

Inicializa uma nova instância da classe MemoryStream com uma capacidade expansível inicializada em zero.Initializes a new instance of the MemoryStream class with an expandable capacity initialized to zero.

MemoryStream(Byte[])

Inicializa uma nova instância não redimensionável da classe MemoryStream com base na matriz de bytes especificada.Initializes a new non-resizable instance of the MemoryStream class based on the specified byte array.

MemoryStream(Byte[], Boolean)

Inicializa uma nova instância não redimensionável da classe MemoryStream com base na matriz de bytes especificada com a propriedade CanWrite definida conforme especificado.Initializes a new non-resizable instance of the MemoryStream class based on the specified byte array with the CanWrite property set as specified.

MemoryStream(Byte[], Int32, Int32)

Inicializa uma nova instância não redimensionável da classe MemoryStream com base na região (índice) especificada de uma matriz bytes.Initializes a new non-resizable instance of the MemoryStream class based on the specified region (index) of a byte array.

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

Inicializa uma nova instância não redimensionável da classe MemoryStream com base na região especificada de uma matriz de bytes, com a propriedade CanWrite definida conforme especificado.Initializes a new non-resizable instance of the MemoryStream class based on the specified region of a byte array, with the CanWrite property set as specified.

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

Inicializa uma nova instância da classe MemoryStream com base na região especificada de uma matriz de bytes, com o conjunto de propriedades CanWrite especificado e a capacidade de chamar GetBuffer() definida de acordo com a especificação.Initializes a new instance of the MemoryStream class based on the specified region of a byte array, with the CanWrite property set as specified, and the ability to call GetBuffer() set as specified.

MemoryStream(Int32)

Inicializa uma nova instância da classe MemoryStream com uma capacidade expansível inicializada conforme especificado.Initializes a new instance of the MemoryStream class with an expandable capacity initialized as specified.

Propriedades

CanRead

Obtém um valor que indica se o fluxo atual dá suporte à leitura.Gets a value indicating whether the current stream supports reading.

CanSeek

Obtém um valor que indica se o fluxo atual dá suporte à busca.Gets a value indicating whether the current stream supports seeking.

CanTimeout

Obtém um valor que determina se o fluxo atual pode atingir o tempo limite.Gets a value that determines whether the current stream can time out.

(Herdado de Stream)
CanWrite

Obtém um valor que indica se o fluxo atual dá suporte à gravação.Gets a value indicating whether the current stream supports writing.

Capacity

Obtém ou define o número de bytes alocados a este fluxo.Gets or sets the number of bytes allocated for this stream.

Length

Obtém o tamanho do fluxo em bytes.Gets the length of the stream in bytes.

Position

Obtém ou define a posição atual no fluxo.Gets or sets the current position within the stream.

ReadTimeout

Obtém ou define um valor, em milissegundos, que determina por quanto tempo o fluxo tentará realizar a leitura antes do tempo limite.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.

(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.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.

(Herdado de Stream)

Métodos

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

Inicia uma operação de leitura assíncrona.Begins an asynchronous read operation. (Considere o uso de ReadAsync(Byte[], Int32, Int32, CancellationToken) em seu lugar.)(Consider using ReadAsync(Byte[], Int32, Int32, CancellationToken) instead.)

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

Inicia uma operação de gravação assíncrona.Begins an asynchronous write operation. (Considere o uso de WriteAsync(Byte[], Int32, Int32, CancellationToken) em seu lugar.)(Consider using WriteAsync(Byte[], Int32, Int32, CancellationToken) instead.)

Close()

Fecha o fluxo para leitura e gravação.Closes the stream for reading and writing.

CopyTo(Stream)

Lê os bytes do fluxo atual e os grava em outro fluxo.Reads the bytes from the current stream and writes them to another stream.

(Herdado de Stream)
CopyTo(Stream, Int32)

Lê os bytes do fluxo de memória atual e grava-os em outro fluxo usando um tamanho do buffer especificado.Reads the bytes from the current memory stream and writes them to another stream, using a specified buffer size.

CopyToAsync(Stream)

Lê de forma assíncrona os bytes do fluxo atual e os grava em outro fluxo.Asynchronously reads the bytes from the current stream and writes them to another stream.

(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.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified cancellation token.

(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.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

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

Lê de maneira assíncrona todos os bytes do fluxo atual e os grava em outro fluxo usando um tamanho do buffer especificado e um token de cancelamento.Asynchronously reads all the bytes from the current stream and writes them to another stream, using a specified buffer size and cancellation token.

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.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Herdado de MarshalByRefObject)
CreateWaitHandle()

Aloca um objeto WaitHandle.Allocates a WaitHandle object.

(Herdado de Stream)
Dispose()

Libera todos os recursos usados pelo Stream.Releases all resources used by the Stream.

(Herdado de Stream)
Dispose(Boolean)

Libera os recursos não gerenciados usados pela classe MemoryStream e, opcionalmente, libera os recursos gerenciados.Releases the unmanaged resources used by the MemoryStream class and optionally releases the managed resources.

DisposeAsync()

Libera de forma assíncrona os recursos não gerenciados usados pelo Stream.Asynchronously releases the unmanaged resources used by the Stream.

(Herdado de Stream)
EndRead(IAsyncResult)

Espera a leitura assíncrona pendente ser concluída.Waits for the pending asynchronous read to complete. (Considere o uso de ReadAsync(Byte[], Int32, Int32, CancellationToken) em seu lugar.)(Consider using ReadAsync(Byte[], Int32, Int32, CancellationToken) instead.)

EndWrite(IAsyncResult)

Encerra uma operação de gravação assíncrona.Ends an asynchronous write operation. (Considere o uso de WriteAsync(Byte[], Int32, Int32, CancellationToken) em seu lugar.)(Consider using WriteAsync(Byte[], Int32, Int32, CancellationToken) instead.)

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object.

(Herdado de Object)
Flush()

Substitui o método Flush() para que nenhuma ação seja executada.Overrides the Flush() method so that no action is performed.

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.Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

(Herdado de Stream)
FlushAsync(CancellationToken)

Limpa de maneira assíncrona todos os buffers para esse fluxo e monitora solicitações de cancelamento.Asynchronously clears all buffers for this stream, and monitors cancellation requests.

GetBuffer()

Retorna a matriz de bytes sem sinal com base na qual este fluxo foi criado.Returns the array of unsigned bytes from which this stream was created.

GetHashCode()

Serve como a função de hash padrão.Serves as the default hash function.

(Herdado de Object)
GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de ciclo de vida para esta instância.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Herdado de MarshalByRefObject)
GetType()

Obtém o Type da instância atual.Gets the Type of the current instance.

(Herdado de Object)
InitializeLifetimeService()

Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida para essa instância.Obtains a lifetime service object to control the lifetime policy for this instance.

(Herdado de MarshalByRefObject)
MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto MarshalByRefObject atual.Creates a shallow copy of the current MarshalByRefObject object.

(Herdado de MarshalByRefObject)
ObjectInvariant()

Oferece suporte a um Contract.Provides support for a Contract.

Read(Byte[], Int32, Int32)

Lê um bloco de bytes do fluxo atual e grava os dados em um buffer.Reads a block of bytes from the current stream and writes the data to a buffer.

Read(Span<Byte>)

Lê uma sequência de bytes do fluxo de memória atual e avança a posição no fluxo de memória até o número de bytes lidos.Reads a sequence of bytes from the current memory stream and advances the position within the memory stream by the number of bytes read.

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.Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

(Herdado de Stream)
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.Asynchronously reads a sequence of bytes from the current stream, advances the position within the stream by the number of bytes read, and monitors cancellation requests.

ReadAsync(Memory<Byte>, CancellationToken)

Lê de forma assíncrona uma sequência de bytes do fluxo de memória atual, grava a sequência no destination, avança a posição no fluxo de memória até o número de bytes lidos e monitora as solicitações de cancelamento.Asynchronously reads a sequence of bytes from the current memory stream, writes the sequence into destination, advances the position within the memory stream by the number of bytes read, and monitors cancellation requests.

ReadByte()

Lê um byte do fluxo atual.Reads a byte from the current stream.

Seek(Int64, SeekOrigin)

Define a posição no fluxo atual com o valor especificado.Sets the position within the current stream to the specified value.

SetLength(Int64)

Define o comprimento do fluxo atual para o valor especificado.Sets the length of the current stream to the specified value.

ToArray()

Grava o conteúdo de fluxo em uma matriz de bytes, independentemente da propriedade Position.Writes the stream contents to a byte array, regardless of the Position property.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.Returns a string that represents the current object.

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

Retorna a matriz de bytes sem sinal com base na qual este fluxo foi criado.Returns the array of unsigned bytes from which this stream was created. O valor de retorno indica se a conversão foi bem-sucedida.The return value indicates whether the conversion succeeded.

Write(Byte[], Int32, Int32)

Grava um bloco de bytes no fluxo atual usando os dados lidos de um buffer.Writes a block of bytes to the current stream using data read from a buffer.

Write(ReadOnlySpan<Byte>)

Grava a sequência de bytes contida em source no fluxo de memória atual e avança a posição atual nesse fluxo de memória até o número de bytes gravados.Writes the sequence of bytes contained in source into the current memory stream and advances the current position within this memory stream by the number of bytes written.

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.Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

(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.Asynchronously writes a sequence of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Grava de forma assíncrona a sequência de bytes contida em source no fluxo de memória atual, avança a posição atual nesse fluxo de memória até o número de bytes gravados e monitora as solicitações de cancelamento.Asynchronously writes the sequence of bytes contained in source into the current memory stream, advances the current position within this memory stream by the number of bytes written, and monitors cancellation requests.

WriteByte(Byte)

Grava um byte no fluxo atual na posição atual.Writes a byte to the current stream at the current position.

WriteTo(Stream)

Grava todo o conteúdo deste fluxo de memória em outro fluxo.Writes the entire contents of this memory stream to another stream.

Implantações explícitas de interface

IDisposable.Dispose()

Libera todos os recursos usados pelo Stream.Releases all resources used by the Stream.

(Herdado de Stream)

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.Converts a managed stream in the .NET for Windows Store apps to an input stream in the Windows Runtime.

AsOutputStream(Stream)

Converte um fluxo gerenciado no .NET para Aplicativos da Windows Store em um fluxo de saída no Windows Runtime.Converts a managed stream in the .NET for Windows Store apps to an output stream in the Windows Runtime.

AsRandomAccessStream(Stream)

Converte o fluxo especificado em um fluxo de acesso aleatório.Converts the specified stream to a random access stream.

GetWindowsRuntimeBuffer(MemoryStream)

Retorna uma interface Windows.Storage.Streams.IBuffer que representa a mesma memória que o fluxo de memória especificado.Returns a Windows.Storage.Streams.IBuffer interface that represents the same memory as the specified memory stream.

GetWindowsRuntimeBuffer(MemoryStream, Int32, Int32)

Retorna uma interface Windows.Storage.Streams.IBuffer que representa uma região dentro da memória representada pelo fluxo de memória especificado.Returns a Windows.Storage.Streams.IBuffer interface that represents a region within the memory that the specified memory stream represents.

Aplica-se a

Veja também