MemoryStream Classe

Definizione

Crea un flusso il cui archivio di backup è costituito dalla memoria.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
Ereditarietà
Attributi

Esempi

Nell'esempio di codice seguente viene illustrato come leggere e scrivere dati utilizzando la memoria come archivio di 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

Commenti

La posizione corrente di un flusso è la posizione in cui può essere eseguita la successiva operazione di lettura o scrittura.The current position of a stream is the position at which the next read or write operation could take place. La posizione corrente può essere recuperata o impostata tramite il metodo Seek.The current position can be retrieved or set through the Seek method. Quando viene creata una nuova istanza di MemoryStream, la posizione corrente viene impostata su zero.When a new instance of MemoryStream is created, the current position is set to zero.

Nota

Questo tipo implementa l'interfaccia IDisposable, ma attualmente non ha risorse da eliminare.This type implements the IDisposable interface, but does not actually have any resources to dispose. Questo significa che non è necessario eliminarlo chiamando direttamente Dispose() o tramite un costrutto del linguaggio, come using (in C#) o Using (in 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.

I flussi di memoria creati con una matrice di byte senza segno forniscono un flusso di dati non ridimensionabile.Memory streams created with an unsigned byte array provide a non-resizable stream of the data. Quando si usa una matrice di byte, non è possibile accodare il flusso né aggiungerlo né compattarlo, sebbene sia possibile modificare il contenuto esistente in base ai parametri passati nel costruttore.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. I flussi di memoria vuoti sono ridimensionabili e possono essere scritti e letti da.Empty memory streams are resizable, and can be written to and read from.

Se un oggetto MemoryStream viene aggiunto a un file ResX o a un file con estensione resources, chiamare il metodo GetStream in fase di esecuzione per recuperarlo.If a MemoryStream object is added to a ResX file or a .resources file, call the GetStream method at runtime to retrieve it.

Se un oggetto MemoryStream viene serializzato in un file di risorse, verrà effettivamente serializzato come UnmanagedMemoryStream.If a MemoryStream object is serialized to a resource file it will actually be serialized as an UnmanagedMemoryStream. Questo comportamento fornisce prestazioni migliori, nonché la possibilità di ottenere direttamente un puntatore ai dati, senza dover passare attraverso Stream metodi.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.

Costruttori

MemoryStream()

Inizializza una nuova istanza della classe MemoryStream con una capacità espandibile inizializzata su zero.Initializes a new instance of the MemoryStream class with an expandable capacity initialized to zero.

MemoryStream(Byte[])

Inizializza una nuova istanza non ridimensionabile della classe MemoryStream in base alla matrice di byte specificata.Initializes a new non-resizable instance of the MemoryStream class based on the specified byte array.

MemoryStream(Byte[], Boolean)

Inizializza una nuova istanza non ridimensionabile della classe MemoryStream in base alla matrice di byte specificata, con la proprietà CanWrite impostata secondo quanto specificato.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)

Inizializza una nuova istanza non ridimensionabile della classe MemoryStream in base alla area specificata (indice) di una matrice di byte.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)

Inizializza una nuova istanza non ridimensionabile della classe MemoryStream in base all'area specificata di una matrice di byte, con la proprietà CanWrite impostata secondo quanto specificato.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)

Inizializza una nuova istanza della classe MemoryStream in base all'area specificata di una matrice di byte, con la proprietà CanWrite impostata secondo quanto specificato e la possibilità di chiamare il metodo GetBuffer() impostato nel modo specificato.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)

Inizializza una nuova istanza della classe MemoryStream con una capacità espandibile inizializzata secondo quanto specificato.Initializes a new instance of the MemoryStream class with an expandable capacity initialized as specified.

Proprietà

CanRead

Ottiene un valore che indica se il flusso corrente supporta la lettura.Gets a value indicating whether the current stream supports reading.

CanSeek

Ottiene un valore che indica se il flusso corrente supporta la ricerca.Gets a value indicating whether the current stream supports seeking.

CanTimeout

Ottiene un valore che determina se il flusso corrente prevede il timeout.Gets a value that determines whether the current stream can time out.

(Ereditato da Stream)
CanWrite

Ottiene un valore che indica se il flusso corrente supporta la scrittura.Gets a value indicating whether the current stream supports writing.

Capacity

Ottiene o imposta il numero di byte allocati per questo flusso.Gets or sets the number of bytes allocated for this stream.

Length

Ottiene la lunghezza in byte del flusso.Gets the length of the stream in bytes.

Position

Ottiene o imposta la posizione corrente all'interno del flusso.Gets or sets the current position within the stream.

ReadTimeout

Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la lettura prima del timeout.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.

(Ereditato da Stream)
WriteTimeout

Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la scrittura prima del timeout.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.

(Ereditato da Stream)

Metodi

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

Avvia un'operazione di lettura asincrona.Begins an asynchronous read operation. (In alternativa, si consideri l'uso di ReadAsync(Byte[], Int32, Int32, CancellationToken).)(Consider using ReadAsync(Byte[], Int32, Int32, CancellationToken) instead.)

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

Avvia un'operazione di scrittura asincrona.Begins an asynchronous write operation. (In alternativa, si consideri l'uso di WriteAsync(Byte[], Int32, Int32, CancellationToken).)(Consider using WriteAsync(Byte[], Int32, Int32, CancellationToken) instead.)

Close()

Chiude il flusso in lettura e scrittura.Closes the stream for reading and writing.

CopyTo(Stream)

Legge i byte dal flusso corrente e li scrive in un altro flusso.Reads the bytes from the current stream and writes them to another stream.

(Ereditato da Stream)
CopyTo(Stream, Int32)

Legge i byte dal flusso di memoria corrente e li scrive in un altro flusso, usando una dimensione di buffer specificata.Reads the bytes from the current memory stream and writes them to another stream, using a specified buffer size.

CopyToAsync(Stream)

Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso.Asynchronously reads the bytes from the current stream and writes them to another stream.

(Ereditato da Stream)
CopyToAsync(Stream, CancellationToken)

Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso, usando un token di annullamento specificato.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified cancellation token.

(Ereditato da Stream)
CopyToAsync(Stream, Int32)

Legge in modo asincrono tutti i byte dal flusso corrente e li scrive in un altro flusso, utilizzando una dimensione di buffer specificata.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

(Ereditato da Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Legge in modo asincrono tutti i byte dal flusso corrente e li scrive in un altro flusso, usando le dimensione del buffer specificate e un token di annullamento.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)

Consente di creare un oggetto che contiene tutte le informazioni rilevanti necessarie per la generazione del proxy utilizzato per effettuare la comunicazione con un oggetto remoto.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Ereditato da MarshalByRefObject)
CreateWaitHandle()

Alloca un oggetto WaitHandle.Allocates a WaitHandle object.

(Ereditato da Stream)
Dispose()

Rilascia tutte le risorse usate da Stream.Releases all resources used by the Stream.

(Ereditato da Stream)
Dispose(Boolean)

Rilascia le risorse non gestite usate dalla classe MemoryStream e facoltativamente le risorse gestite.Releases the unmanaged resources used by the MemoryStream class and optionally releases the managed resources.

DisposeAsync()

Consente di liberare in modo asincrono le risorse non gestite utilizzate da Stream.Asynchronously releases the unmanaged resources used by the Stream.

(Ereditato da Stream)
EndRead(IAsyncResult)

Attende il completamento della lettura asincrona in sospeso.Waits for the pending asynchronous read to complete. (In alternativa, si consideri l'uso di ReadAsync(Byte[], Int32, Int32, CancellationToken).)(Consider using ReadAsync(Byte[], Int32, Int32, CancellationToken) instead.)

EndWrite(IAsyncResult)

Termina un'operazione di scrittura asincrona.Ends an asynchronous write operation. (In alternativa, si consideri l'uso di WriteAsync(Byte[], Int32, Int32, CancellationToken).)(Consider using WriteAsync(Byte[], Int32, Int32, CancellationToken) instead.)

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
Flush()

Esegue l'override del metodo Flush() in modo che non venga effettuata alcuna operazione.Overrides the Flush() method so that no action is performed.

FlushAsync()

Cancella in modo asincrono i dati di tutti i buffer del flusso e determina la scrittura dei dati memorizzati nel buffer nel dispositivo sottostante.Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

(Ereditato da Stream)
FlushAsync(CancellationToken)

Rimuove in modo asincrono tutti i buffer per questo flusso e monitora le richieste di annullamento.Asynchronously clears all buffers for this stream, and monitors cancellation requests.

GetBuffer()

Restituisce la matrice di byte senza segno da cui è stato creato questo flusso.Returns the array of unsigned bytes from which this stream was created.

GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetLifetimeService()

Consente di recuperare l'oggetto servizio di durata corrente per controllare i criteri di durata per l'istanza.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Ereditato da MarshalByRefObject)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
InitializeLifetimeService()

Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza.Obtains a lifetime service object to control the lifetime policy for this instance.

(Ereditato da MarshalByRefObject)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
MemberwiseClone(Boolean)

Crea una copia dei riferimenti dell'oggetto MarshalByRefObject corrente.Creates a shallow copy of the current MarshalByRefObject object.

(Ereditato da MarshalByRefObject)
ObjectInvariant()

Fornisce supporto per un oggetto Contract.Provides support for a Contract.

Read(Byte[], Int32, Int32)

Legge un blocco di byte dal flusso corrente e scrive i dati in un buffer.Reads a block of bytes from the current stream and writes the data to a buffer.

Read(Span<Byte>)

Legge una sequenza di byte dal flusso di memoria corrente e fa avanzare la posizione corrente nel flusso di memoria del numero di byte letti.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)

Legge in modo asincrono una sequenza di byte dal flusso corrente e passa alla posizione successiva nel flusso in base al numero di byte letti.Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

(Ereditato da Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Legge in modo asincrono una sequenza di byte dal flusso corrente e passa alla posizione successiva all'interno del flusso corrente in base al numero di byte letti e monitora le richieste di annullamento.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)

Legge in modo asincrono una sequenza di byte dal flusso di memoria corrente, scrive la sequenza in destination, fa avanzare la posizione all'interno del flusso di memoria in base al numero di byte letti e monitora le richieste di annullamento.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()

Legge un byte dal flusso corrente.Reads a byte from the current stream.

Seek(Int64, SeekOrigin)

Imposta la posizione all'interno del flusso corrente sul valore specificato.Sets the position within the current stream to the specified value.

SetLength(Int64)

Imposta la lunghezza del flusso corrente sul valore specificato.Sets the length of the current stream to the specified value.

ToArray()

Scrive il contenuto del flusso in una matrice di byte, indipendentemente dalla proprietà Position.Writes the stream contents to a byte array, regardless of the Position property.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)
TryGetBuffer(ArraySegment<Byte>)

Restituisce la matrice di byte senza segno da cui è stato creato questo flusso.Returns the array of unsigned bytes from which this stream was created. Il valore restituito indica se la conversione è riuscita.The return value indicates whether the conversion succeeded.

Write(Byte[], Int32, Int32)

Scrive un blocco di byte nel flusso corrente usando dati letti da un buffer.Writes a block of bytes to the current stream using data read from a buffer.

Write(ReadOnlySpan<Byte>)

Scrive la sequenza di byte contenuti in source nel flusso di memoria corrente e fa avanzare la posizione corrente all'interno del flusso di memoria del numero di byte scritti.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)

Scrive in modo asincrono una sequenza di byte nel flusso corrente e passa alla posizione successiva nel flusso in base al numero di byte scritti.Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

(Ereditato da Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Scrive in modo asincrono una sequenza di byte nel flusso corrente e passa alla posizione successiva all'interno del flusso corrente in base al numero di byte scritti e monitora le richieste di annullamento.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)

Scrive in modo asincrono la sequenza di byte contenuta in source nel flusso di memoria corrente, sposta in avanti la posizione corrente all'interno del flusso di memoria del numero di byte scritti ed esegue il monitoraggio delle richieste di annullamento.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)

Scrive un byte nella posizione corrente all'interno del flusso corrente.Writes a byte to the current stream at the current position.

WriteTo(Stream)

Scrive l'intero contenuto del flusso di memoria in un altro flusso.Writes the entire contents of this memory stream to another stream.

Implementazioni dell'interfaccia esplicita

IDisposable.Dispose()

Rilascia tutte le risorse usate da Stream.Releases all resources used by the Stream.

(Ereditato da Stream)

Metodi di estensione

AsInputStream(Stream)

Converte un flusso gestito in .NET per app di Windows Store in un flusso di input in Windows Runtime.Converts a managed stream in the .NET for Windows Store apps to an input stream in the Windows Runtime.

AsOutputStream(Stream)

Converte un flusso gestito in .NET per app di Windows Store in un flusso di output in Windows Runtime.Converts a managed stream in the .NET for Windows Store apps to an output stream in the Windows Runtime.

AsRandomAccessStream(Stream)

Converte il flusso specificato in un flusso di accesso casuale.Converts the specified stream to a random access stream.

GetWindowsRuntimeBuffer(MemoryStream)

Restituisce un'interfaccia Windows.Storage.Streams.IBuffer che rappresenta la stessa memoria del flusso di memoria specificato.Returns a Windows.Storage.Streams.IBuffer interface that represents the same memory as the specified memory stream.

GetWindowsRuntimeBuffer(MemoryStream, Int32, Int32)

Restituisce un'interfaccia Windows.Storage.Streams.IBuffer che rappresenta un'area all'interno della memoria rappresentata dal flusso di memoria specificato.Returns a Windows.Storage.Streams.IBuffer interface that represents a region within the memory that the specified memory stream represents.

Si applica a

Vedi anche