UnmanagedMemoryStream Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Importante
Questa API non è conforme a CLS.
Fornisce l'accesso a blocchi di memoria non gestiti da codice gestito.
public ref class UnmanagedMemoryStream : System::IO::Stream
public class UnmanagedMemoryStream : System.IO.Stream
[System.CLSCompliant(false)]
public class UnmanagedMemoryStream : System.IO.Stream
type UnmanagedMemoryStream = class
inherit Stream
[<System.CLSCompliant(false)>]
type UnmanagedMemoryStream = class
inherit Stream
Public Class UnmanagedMemoryStream
Inherits Stream
- Ereditarietà
- Ereditarietà
- Derivato
- Attributi
Esempio
Nell'esempio di codice seguente viene illustrato come leggere e scrivere in memoria non gestita usando la UnmanagedMemoryStream classe . Un blocco di memoria non gestita viene allocato e de-allocato usando la Marshal classe .
// Note: you must compile this sample using the unsafe flag.
// From the command line, type the following: csc sample.cs /unsafe
using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
unsafe class TestWriter
{
static void Main()
{
// Create some data to read and write.
byte[] message = UnicodeEncoding.Unicode.GetBytes("Here is some data.");
// Allocate a block of unmanaged memory and return an IntPtr object.
IntPtr memIntPtr = Marshal.AllocHGlobal(message.Length);
// Get a byte pointer from the IntPtr object.
byte* memBytePtr = (byte*)memIntPtr.ToPointer();
// Create an UnmanagedMemoryStream object using a pointer to unmanaged memory.
UnmanagedMemoryStream writeStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Write);
// Write the data.
writeStream.Write(message, 0, message.Length);
// Close the stream.
writeStream.Close();
// Create another UnmanagedMemoryStream object using a pointer to unmanaged memory.
UnmanagedMemoryStream readStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Read);
// Create a byte array to hold data from unmanaged memory.
byte[] outMessage = new byte[message.Length];
// Read from unmanaged memory to the byte array.
readStream.Read(outMessage, 0, message.Length);
// Close the stream.
readStream.Close();
// Display the data to the console.
Console.WriteLine(UnicodeEncoding.Unicode.GetString(outMessage));
// Free the block of unmanaged memory.
Marshal.FreeHGlobal(memIntPtr);
Console.ReadLine();
}
}
Commenti
Questa classe supporta l'accesso alla memoria non gestita usando il modello basato su flusso esistente e non richiede che il contenuto nella memoria non gestita venga copiato nell'heap.
Nota
Questo tipo implementa l'interfaccia IDisposable, ma attualmente non ha risorse da eliminare. Questo significa che non è necessario eliminarlo chiamando direttamente Dispose() o tramite un costrutto del linguaggio, come using
(in C#) o Using
(in Visual Basic).
Costruttori
UnmanagedMemoryStream() |
Inizializza una nuova istanza della classe UnmanagedMemoryStream. |
UnmanagedMemoryStream(Byte*, Int64) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream usando la posizione e la dimensione di memoria specificate. |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream usando la posizione, la lunghezza e la quantità totale di memoria e i valori di accesso ai file specificati. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream in un buffer sicuro, con un valore specificato di offset e lunghezza. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream in un buffer sicuro, con un valore specificato di offset, lunghezza e accesso ai file. |
Proprietà
CanRead |
Ottiene un valore che indica se il flusso supporta la lettura. |
CanSeek |
Ottiene un valore che indica se il flusso supporta la ricerca. |
CanTimeout |
Ottiene un valore che determina se il flusso corrente prevede il timeout. (Ereditato da Stream) |
CanWrite |
Ottiene un valore che indica se il flusso supporta la scrittura. |
Capacity |
Ottiene la lunghezza (dimensione) del flusso o la quantità totale di memoria assegnata al flusso (capacità). |
Length |
Ottiene la lunghezza dei dati in un flusso. |
Position |
Ottiene o imposta la posizione corrente nel flusso. |
PositionPointer |
Ottiene o imposta un puntatore byte al flusso in base alla posizione corrente nel flusso. |
ReadTimeout |
Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la lettura prima del timeout. (Ereditato da Stream) |
WriteTimeout |
Ottiene o imposta un valore, in millisecondi, che determina per quanto tempo il flusso tenterà la scrittura prima del timeout. (Ereditato da Stream) |
Metodi
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Inizia un'operazione di lettura asincrona. Si consiglia di usare ReadAsync(Byte[], Int32, Int32). (Ereditato da Stream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Inizia un'operazione di scrittura asincrona. Si consiglia di usare WriteAsync(Byte[], Int32, Int32). (Ereditato da Stream) |
Close() |
Chiude il flusso corrente e libera le risorse, come socket e handle di file, ad esso associate. Anziché 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 dal numero di byte copiati. (Ereditato da Stream) |
CopyTo(Stream, Int32) |
Legge tutti i byte dal flusso corrente e li scrive in un altro flusso, usando una dimensione di buffer specificata. Entrambe le posizioni dei flussi sono avanzate dal 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 dal 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 dal numero di byte copiati. (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. Entrambe le posizioni dei flussi sono avanzate dal numero di byte copiati. (Ereditato da Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
Legge in modo asincrono i byte dal flusso corrente e li scrive in un altro flusso, usando una dimensione di buffer specificata e un token di annullamento. Entrambe le posizioni dei flussi sono avanzate dal numero di byte copiati. (Ereditato da Stream) |
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. (Ereditato da MarshalByRefObject) |
CreateWaitHandle() |
Obsoleti.
Obsoleti.
Obsoleti.
Alloca un oggetto WaitHandle. (Ereditato da Stream) |
Dispose() |
Rilascia tutte le risorse usate da Stream. (Ereditato da Stream) |
Dispose(Boolean) |
Rilascia le risorse non gestite usate da UnmanagedMemoryStream e, facoltativamente, le risorse gestite. |
DisposeAsync() |
Consente di liberare in modo asincrono le risorse non gestite utilizzate da Stream. (Ereditato da Stream) |
EndRead(IAsyncResult) |
Attende il completamento della lettura asincrona in sospeso. Si consiglia di usare ReadAsync(Byte[], Int32, Int32). (Ereditato da Stream) |
EndWrite(IAsyncResult) |
Termina un'operazione di scrittura asincrona. Si consiglia di usare 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 effettuata alcuna operazione. |
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. (Ereditato da Stream) |
FlushAsync(CancellationToken) |
Esegue l'override del metodo FlushAsync(CancellationToken) in modo che, se specificato, l'operazione venga annullata, ma non vengano eseguite altre azioni. |
FlushAsync(CancellationToken) |
Cancella in modo asincrono i dati di tutti i buffer del flusso, determina la scrittura dei dati memorizzati nel buffer nel dispositivo sottostante e monitora le richieste di annullamento. (Ereditato da Stream) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetLifetimeService() |
Obsoleti.
Consente di recuperare l'oggetto servizio di durata corrente per controllare i criteri di durata per l'istanza. (Ereditato da MarshalByRefObject) |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
Initialize(Byte*, Int64, Int64, FileAccess) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream usando un puntatore a una posizione di memoria non gestita. |
Initialize(SafeBuffer, Int64, Int64, FileAccess) |
Inizializza una nuova istanza della classe UnmanagedMemoryStream in un buffer sicuro, con un valore specificato di offset, lunghezza e accesso ai file. |
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 dell'oggetto Object corrente. (Ereditato da Object) |
MemberwiseClone(Boolean) |
Crea una copia dei riferimenti dell'oggetto MarshalByRefObject corrente. (Ereditato da MarshalByRefObject) |
ObjectInvariant() |
Obsoleti.
Fornisce supporto per un oggetto Contract. (Ereditato da Stream) |
Read(Byte[], Int32, Int32) |
Legge il numero di byte specificato in una matrice specificata. |
Read(Span<Byte>) |
Legge tutti i byte di questo flusso di memoria non gestita nell'intervallo di byte specificato. |
Read(Span<Byte>) |
Quando ne viene eseguito l'override in una classe derivata, legge una sequenza di byte dal flusso corrente e passa alla posizione successiva all'interno del flusso corrente 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 passa alla posizione successiva nel flusso in base al numero di byte letti. (Ereditato da Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Legge in modalità asincrona il numero di byte specificato nella matrice specificata. |
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. (Ereditato da Stream) |
ReadAsync(Memory<Byte>, CancellationToken) |
Legge in modo asincrono i byte del flusso di memoria non gestita nell'area di memoria. |
ReadAsync(Memory<Byte>, 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. (Ereditato da Stream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
Legge almeno un numero minimo di byte dal flusso corrente e avanza 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, avanza 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 e sposta in avanti la posizione corrente all'interno del flusso di un byte o restituisce -1 se si trova alla fine del flusso. |
ReadExactly(Byte[], Int32, Int32) |
|
ReadExactly(Span<Byte>) |
Legge i byte dal flusso corrente e avanza la posizione all'interno del flusso finché non |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Legge in modo |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Legge in modo asincrono i byte dal flusso corrente, avanza la posizione all'interno del flusso finché non |
Seek(Int64, SeekOrigin) |
Imposta la posizione corrente del flusso corrente sul valore dato. |
SetLength(Int64) |
Imposta la lunghezza di un flusso al valore specificato. |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Write(Byte[], Int32, Int32) |
Scrive un blocco di byte nel flusso corrente usando dati da un buffer. |
Write(ReadOnlySpan<Byte>) |
Scrive un blocco di byte nel flusso di memoria non gestita corrente usando i dati dell'intervallo di byte specificato. |
Write(ReadOnlySpan<Byte>) |
Quando ne viene eseguito l'override in una classe derivata, scrive una sequenza di byte nel flusso corrente e passa alla posizione successiva all'interno del flusso corrente 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 passa alla posizione successiva nel 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 e passa alla posizione successiva all'interno del flusso corrente 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 e passa alla posizione successiva all'interno del flusso corrente in base al numero di byte scritti e monitora le richieste di annullamento. (Ereditato da Stream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Scrive in modo asincrono un intervallo di byte nel flusso corrente, fa avanzare la posizione corrente all'interno del flusso 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 e passa alla posizione successiva all'interno del flusso corrente in base al numero di byte scritti e monitora le richieste di annullamento. (Ereditato da Stream) |
WriteByte(Byte) |
Scrive un byte nella posizione corrente all'interno del flusso di file. |
Metodi di estensione
CopyToAsync(Stream, PipeWriter, CancellationToken) |
Legge in modo asincrono i byte da Stream e li scrive nel PipeWriter specificato usando un token di annullamento. |
AsInputStream(Stream) |
Converte un flusso gestito in .NET per app di Windows Store in un flusso di input in Windows Runtime. |
AsOutputStream(Stream) |
Converte un flusso gestito in .NET per app di Windows Store in un flusso di output in Windows Runtime. |
AsRandomAccessStream(Stream) |
Converte il flusso specificato in un flusso di accesso casuale. |
ConfigureAwait(IAsyncDisposable, Boolean) |
Consente di configurare la modalità di esecuzione delle espressioni await per le attività restituite da un elemento disposable asincrono. |
Si applica a
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per