Condividi tramite


MemoryStream Classe

Definizione

Crea un flusso il cui archivio di backup è memoria.

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
Ereditarietà
MemoryStream
Ereditarietà
Attributi

Esempio

Nell'esempio di codice seguente viene illustrato come leggere e scrivere dati usando la memoria come archivio di backup.

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++] = (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

Commenti

La posizione corrente di un flusso è la posizione in cui può essere eseguita l'operazione di lettura o scrittura successiva. La posizione corrente può essere recuperata o impostata tramite il metodo Seek. Quando viene creata una nuova istanza di MemoryStream, la posizione corrente viene impostata su zero.

Nota

Questo tipo implementa l'interfaccia IDisposable, ma non dispone effettivamente di risorse da eliminare. Ciò significa che non è necessario eliminarlo chiamando direttamente Dispose() o usando un costrutto di linguaggio, ad esempio using (in C#) o Using (in Visual Basic).

I flussi di memoria creati con una matrice di byte senza segno forniscono un flusso non ridimensionabile dei dati. Quando si usa una matrice di byte, non è possibile accodare né compattare il flusso, anche se potrebbe essere possibile modificare il contenuto esistente a seconda dei parametri passati nel costruttore. I flussi di memoria vuoti sono ridimensionabili e possono essere scritti in e letti da.

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.

Se un oggetto MemoryStream viene serializzato in un file di risorse, verrà effettivamente serializzato come UnmanagedMemoryStream. Questo comportamento offre prestazioni migliori, nonché la possibilità di ottenere direttamente un puntatore ai dati, senza dover eseguire Stream metodi.

Costruttori

MemoryStream()

Inizializza una nuova istanza della classe MemoryStream con una capacità espandibile inizializzata su zero.

MemoryStream(Byte[])

Inizializza una nuova istanza non ridimensionabile della classe MemoryStream in base alla matrice di byte specificata.

MemoryStream(Byte[], Boolean)

Inizializza una nuova istanza non ridimensionabile della classe MemoryStream in base alla matrice di byte specificata con la proprietà CanWrite impostata come specificato.

MemoryStream(Byte[], Int32, Int32)

Inizializza una nuova istanza non ridimensionabile della classe MemoryStream in base all'area specificata (indice) di una matrice di byte.

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 come specificato.

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 come specificato e la possibilità di chiamare GetBuffer() impostato come specificato.

MemoryStream(Int32)

Inizializza una nuova istanza della classe MemoryStream con una capacità espandibile inizializzata come specificato.

Proprietà

CanRead

Ottiene un valore che indica se il flusso corrente supporta la lettura.

CanSeek

Ottiene un valore che indica se il flusso corrente supporta la ricerca.

CanTimeout

Ottiene un valore che determina se il flusso corrente può verificarsi un timeout.

(Ereditato da Stream)
CanWrite

Ottiene un valore che indica se il flusso corrente supporta la scrittura.

Capacity

Ottiene o imposta il numero di byte allocati per questo flusso.

Length

Ottiene la lunghezza del flusso in byte.

Position

Ottiene o imposta la posizione corrente all'interno del flusso.

ReadTimeout

Ottiene o imposta un valore, espresso in millisecondi, che determina per quanto tempo il flusso tenterà di leggere prima del timeout.

(Ereditato da Stream)
WriteTimeout

Ottiene o imposta un valore, espresso in millisecondi, che determina per quanto tempo il flusso tenterà di scrivere prima del timeout.

(Ereditato da Stream)

Metodi

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

Avvia un'operazione di lettura asincrona. Prendere invece in considerazione l'uso di ReadAsync(Byte[], Int32, Int32, CancellationToken).

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

Avvia un'operazione di lettura asincrona. Prendere invece in considerazione l'uso di ReadAsync(Byte[], Int32, Int32).

(Ereditato da Stream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Avvia un'operazione di scrittura asincrona. Prendere invece in considerazione l'uso di WriteAsync(Byte[], Int32, Int32, CancellationToken).

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

Avvia un'operazione di scrittura asincrona. Prendere invece in considerazione l'uso di WriteAsync(Byte[], Int32, Int32).

(Ereditato da Stream)
Close()

Chiude il flusso per la lettura e la scrittura.

Close()

Chiude il flusso corrente e rilascia tutte le risorse (ad esempio socket e handle di file) associate al flusso corrente. Invece di chiamare questo metodo, assicurarsi che il flusso sia eliminato correttamente.

(Ereditato da Stream)
CopyTo(Stream)

Legge i byte dal flusso corrente e li scrive in un altro flusso. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(Ereditato da Stream)
CopyTo(Stream, Int32)

Legge i byte dal flusso di memoria corrente e li scrive in un altro flusso, usando una dimensione del buffer specificata.

CopyTo(Stream, Int32)

Legge i byte dal flusso corrente e li scrive in un altro flusso, usando una dimensione del buffer specificata. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(Ereditato da Stream)
CopyToAsync(Stream)

Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(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. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(Ereditato da Stream)
CopyToAsync(Stream, Int32)

Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso, usando una dimensione del buffer specificata. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(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 una dimensione del buffer e un token di annullamento specificati.

CopyToAsync(Stream, Int32, CancellationToken)

Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso, usando una dimensione del buffer e un token di annullamento specificati. Entrambe le posizioni dei flussi sono avanzate in base al numero di byte copiati.

(Ereditato da Stream)
CreateObjRef(Type)

Crea un oggetto che contiene tutte le informazioni pertinenti necessarie per generare un proxy utilizzato per comunicare con un oggetto remoto.

(Ereditato da MarshalByRefObject)
CreateWaitHandle()
Obsoleti.
Obsoleti.
Obsoleti.

Alloca un oggetto WaitHandle.

(Ereditato da Stream)
Dispose()

Rilascia tutte le risorse usate dal Stream.

(Ereditato da Stream)
Dispose(Boolean)

Rilascia le risorse non gestite usate dalla classe MemoryStream e, facoltativamente, rilascia le risorse gestite.

Dispose(Boolean)

Rilascia le risorse non gestite usate dal Stream e, facoltativamente, rilascia le risorse gestite.

(Ereditato da Stream)
DisposeAsync()

Rilascia in modo asincrono le risorse non gestite usate dal Stream.

(Ereditato da Stream)
EndRead(IAsyncResult)

Attende il completamento della lettura asincrona in sospeso. Prendere invece in considerazione l'uso di ReadAsync(Byte[], Int32, Int32, CancellationToken).

EndRead(IAsyncResult)

Attende il completamento della lettura asincrona in sospeso. Prendere invece in considerazione l'uso di ReadAsync(Byte[], Int32, Int32).

(Ereditato da Stream)
EndWrite(IAsyncResult)

Termina un'operazione di scrittura asincrona. Prendere invece in considerazione l'uso di WriteAsync(Byte[], Int32, Int32, CancellationToken).

EndWrite(IAsyncResult)

Termina un'operazione di scrittura asincrona. Prendere invece in considerazione l'uso di WriteAsync(Byte[], Int32, Int32).

(Ereditato da Stream)
Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
Flush()

Esegue l'override del metodo Flush() in modo che non venga eseguita alcuna azione.

FlushAsync()

Cancella in modo asincrono tutti i buffer per questo flusso e determina la scrittura di tutti i dati memorizzati nel buffer nel dispositivo sottostante.

(Ereditato da Stream)
FlushAsync(CancellationToken)

Cancella in modo asincrono tutti i buffer per questo flusso e monitora le richieste di annullamento.

FlushAsync(CancellationToken)

Cancella in modo asincrono tutti i buffer per questo flusso, determina la scrittura di tutti i dati memorizzati nel buffer nel dispositivo sottostante e monitora le richieste di annullamento.

(Ereditato da Stream)
GetBuffer()

Restituisce la matrice di byte senza segno da cui è stato creato il flusso.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetLifetimeService()
Obsoleti.

Recupera l'oggetto servizio di durata corrente che controlla i criteri di durata per questa istanza.

(Ereditato da MarshalByRefObject)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
InitializeLifetimeService()
Obsoleti.

Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza.

(Ereditato da MarshalByRefObject)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
MemberwiseClone(Boolean)

Crea una copia superficiale dell'oggetto MarshalByRefObject corrente.

(Ereditato da MarshalByRefObject)
ObjectInvariant()

Questa API supporta l'infrastruttura del prodotto e non è previsto che venga usata direttamente dal codice.

Fornisce il supporto per un Contract.

ObjectInvariant()
Obsoleti.

Fornisce il supporto per un Contract.

(Ereditato da Stream)
Read(Byte[], Int32, Int32)

Legge un blocco di byte dal flusso corrente e scrive i dati in un buffer.

Read(Span<Byte>)

Legge una sequenza di byte dal flusso di memoria corrente e sposta in avanti la posizione all'interno del flusso di memoria in base al numero di byte letti.

Read(Span<Byte>)

Quando sottoposto a override in una classe derivata, legge una sequenza di byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso in base al numero di byte letti.

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

Legge in modo asincrono una sequenza di byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso in base al numero di byte letti.

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

Legge in modo asincrono una sequenza di byte dal flusso corrente, sposta in avanti la posizione all'interno del flusso in base al numero di byte letti e monitora le richieste di annullamento.

ReadAsync(Byte[], Int32, Int32, CancellationToken)

Legge in modo asincrono una sequenza di byte dal flusso corrente, sposta in avanti la posizione all'interno del flusso in base al numero di byte letti e monitora le richieste di annullamento.

(Ereditato da Stream)
ReadAsync(Memory<Byte>, CancellationToken)

Legge in modo asincrono una sequenza di byte dal flusso di memoria corrente, scrive la sequenza in destination, sposta in avanti la posizione all'interno del flusso di memoria in base al numero di byte letti e monitora le richieste di annullamento.

ReadAsync(Memory<Byte>, CancellationToken)

Legge in modo asincrono una sequenza di byte dal flusso corrente, sposta in avanti la posizione all'interno del flusso in base al numero di byte letti e monitora le richieste di annullamento.

(Ereditato da Stream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

Legge almeno un numero minimo di byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso in base al numero di byte letti.

(Ereditato da Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Legge in modo asincrono almeno un numero minimo di byte dal flusso corrente, sposta in avanti la posizione all'interno del flusso in base al numero di byte letti e monitora le richieste di annullamento.

(Ereditato da Stream)
ReadByte()

Legge un byte dal flusso corrente.

ReadExactly(Byte[], Int32, Int32)

Legge count numero di byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso.

(Ereditato da Stream)
ReadExactly(Span<Byte>)

Legge i byte dal flusso corrente e sposta in avanti la posizione all'interno del flusso fino a quando il buffer non viene riempito.

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

Legge in modo asincrono count numero di byte dal flusso corrente, sposta in avanti la posizione all'interno del flusso e monitora le richieste di annullamento.

(Ereditato da Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

Legge in modo asincrono i byte dal flusso corrente, sposta la posizione all'interno del flusso fino a quando il buffer non viene riempito e monitora le richieste di annullamento.

(Ereditato da Stream)
Seek(Int64, SeekOrigin)

Imposta la posizione all'interno del flusso corrente sul valore specificato.

SetLength(Int64)

Imposta la lunghezza del flusso corrente sul valore specificato.

ToArray()

Scrive il contenuto del flusso in una matrice di byte, indipendentemente dalla proprietà Position.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

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

Restituisce la matrice di byte senza segno da cui è stato creato il flusso. Il valore restituito indica se la conversione è riuscita.

Write(Byte[], Int32, Int32)

Scrive un blocco di byte nel flusso corrente usando i dati letti da un buffer.

Write(ReadOnlySpan<Byte>)

Scrive la sequenza di byte contenuti in source nel flusso di memoria corrente e sposta in avanti la posizione corrente all'interno di questo flusso di memoria in base al numero di byte scritti.

Write(ReadOnlySpan<Byte>)

Quando sottoposto a override in una classe derivata, scrive una sequenza di byte nel flusso corrente e sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti.

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

Scrive in modo asincrono una sequenza di byte nel flusso corrente e sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti.

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

Scrive in modo asincrono una sequenza di byte nel flusso corrente, sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti e monitora le richieste di annullamento.

WriteAsync(Byte[], Int32, Int32, CancellationToken)

Scrive in modo asincrono una sequenza di byte nel flusso corrente, sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti e monitora le richieste di annullamento.

(Ereditato da Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Scrive in modo asincrono la sequenza di byte contenuti in source nel flusso di memoria corrente, sposta in avanti la posizione corrente all'interno del flusso di memoria in base al numero di byte scritti e monitora le richieste di annullamento.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Scrive in modo asincrono una sequenza di byte nel flusso corrente, sposta in avanti la posizione corrente all'interno del flusso in base al numero di byte scritti e monitora le richieste di annullamento.

(Ereditato da Stream)
WriteByte(Byte)

Scrive un byte nel flusso corrente nella posizione corrente.

WriteTo(Stream)

Scrive l'intero contenuto di questo flusso di memoria in un altro flusso.

Implementazioni dell'interfaccia esplicita

IDisposable.Dispose()

Rilascia tutte le risorse usate dal Stream.

(Ereditato da Stream)

Metodi di estensione

CopyToAsync(Stream, PipeWriter, CancellationToken)

Legge in modo asincrono i byte dal Stream e li scrive nel PipeWriterspecificato usando un token di annullamento.

AsInputStream(Stream)

Converte un flusso gestito nelle app .NET per Windows Store in un flusso di input in Windows Runtime.

AsOutputStream(Stream)

Converte un flusso gestito nelle app .NET per Windows Store in un flusso di output in Windows Runtime.

AsRandomAccessStream(Stream)

Converte il flusso specificato in un flusso di accesso casuale.

GetWindowsRuntimeBuffer(MemoryStream)

Restituisce un'interfaccia Windows.Storage.Streams.IBuffer che rappresenta la stessa memoria del flusso di memoria specificato.

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.

ConfigureAwait(IAsyncDisposable, Boolean)

Configura il modo in cui verranno eseguite le attese nelle attività restituite da un oggetto eliminabile asincrono.

Si applica a

Vedi anche