UnmanagedMemoryStream Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Wichtig
Diese API ist nicht CLS-kompatibel.
Bietet Zugriff auf nicht verwaltete Speicherblöcke aus verwaltetem Code.
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
- Vererbung
- Vererbung
- Abgeleitet
- Attribute
Beispiele
Im folgenden Codebeispiel wird das Lesen und Schreiben in nicht verwalteten Arbeitsspeicher mithilfe der UnmanagedMemoryStream Klasse veranschaulicht. Ein Block des nicht verwalteten Speichers wird mithilfe der Marshal-Klasse zugewiesen und aufgehoben.
// 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();
}
}
Hinweise
Diese Klasse unterstützt den Zugriff auf nicht verwalteten Arbeitsspeicher mithilfe des vorhandenen streambasierten Modells und erfordert nicht, dass die Inhalte im nicht verwalteten Speicher in den Heap kopiert werden.
Anmerkung
Dieser Typ implementiert die IDisposable-Schnittstelle, verfügt jedoch nicht über Ressourcen zum Löschen. Dies bedeutet, dass das Löschen durch direktes Aufrufen von Dispose() oder durch Verwenden eines Sprachkonstrukts wie using
(in C#) oder Using
(in Visual Basic) nicht erforderlich ist.
Konstruktoren
UnmanagedMemoryStream() |
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse. |
UnmanagedMemoryStream(Byte*, Int64) |
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse mithilfe des angegebenen Speicherorts und der angegebenen Speicherlänge. |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse unter Verwendung des angegebenen Speicherorts, der Arbeitsspeicherlänge, der Gesamtmenge des Arbeitsspeichers und der Dateizugriffswerte. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse in einem sicheren Puffer mit einem angegebenen Offset und einer angegebenen Länge. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Initialisiert eine neue Instanz der UnmanagedMemoryStream-Klasse in einem sicheren Puffer mit einem angegebenen Offset, einer bestimmten Länge und einem Dateizugriff. |
Eigenschaften
CanRead |
Ruft einen Wert ab, der angibt, ob ein Datenstrom das Lesen unterstützt. |
CanSeek |
Ruft einen Wert ab, der angibt, ob ein Datenstrom die Suche unterstützt. |
CanTimeout |
Ruft einen Wert ab, der bestimmt, ob der aktuelle Datenstrom Timeout ausführen kann. (Geerbt von Stream) |
CanWrite |
Ruft einen Wert ab, der angibt, ob ein Datenstrom das Schreiben unterstützt. |
Capacity |
Ruft die Datenstromlänge (Größe) oder die Gesamtmenge des Arbeitsspeichers ab, der einem Datenstrom (Kapazität) zugewiesen ist. |
Length |
Ruft die Länge der Daten in einem Datenstrom ab. |
Position |
Ruft die aktuelle Position in einem Datenstrom ab oder legt sie fest. |
PositionPointer |
Dient zum Abrufen oder Festlegen eines Bytezeigers auf einen Datenstrom basierend auf der aktuellen Position im Datenstrom. |
ReadTimeout |
Dient zum Abrufen oder Festlegen eines Werts in Millisekunden, der bestimmt, wie lange der Datenstrom vor dem Timeout zu lesen versucht. (Geerbt von Stream) |
WriteTimeout |
Dient zum Abrufen oder Festlegen eines Werts in Millisekunden, der bestimmt, wie lange der Datenstrom versucht, vor dem Timeout zu schreiben. (Geerbt von Stream) |
Methoden
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Startet einen asynchronen Lesevorgang. (Verwenden Sie stattdessen ReadAsync(Byte[], Int32, Int32).) (Geerbt von Stream) |
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Startet einen asynchronen Schreibvorgang. (Verwenden Sie stattdessen WriteAsync(Byte[], Int32, Int32).) (Geerbt von Stream) |
Close() |
Schließt den aktuellen Datenstrom und gibt alle Ressourcen (z. B. Sockets und Dateihandles) frei, die dem aktuellen Datenstrom zugeordnet sind. Anstatt diese Methode aufzurufen, stellen Sie sicher, dass der Datenstrom ordnungsgemäß verworfen ist. (Geerbt von Stream) |
CopyTo(Stream) |
Liest die Bytes aus dem aktuellen Datenstrom und schreibt sie in einen anderen Datenstrom. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. (Geerbt von Stream) |
CopyTo(Stream, Int32) |
Liest die Bytes aus dem aktuellen Datenstrom und schreibt sie mithilfe einer angegebenen Puffergröße in einen anderen Datenstrom. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. (Geerbt von Stream) |
CopyToAsync(Stream) |
Liest die Bytes asynchron aus dem aktuellen Datenstrom und schreibt sie in einen anderen Datenstrom. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. (Geerbt von Stream) |
CopyToAsync(Stream, CancellationToken) |
Liest die Bytes asynchron aus dem aktuellen Datenstrom und schreibt sie mithilfe eines angegebenen Abbruchtokens in einen anderen Datenstrom. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. (Geerbt von Stream) |
CopyToAsync(Stream, Int32) |
Liest die Bytes asynchron aus dem aktuellen Datenstrom und schreibt sie mithilfe einer angegebenen Puffergröße in einen anderen Datenstrom. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. (Geerbt von Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
Liest asynchron die Bytes aus dem aktuellen Datenstrom und schreibt sie in einen anderen Datenstrom, wobei eine angegebene Puffergröße und ein Abbruchtoken verwendet wird. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. (Geerbt von Stream) |
CreateObjRef(Type) |
Erstellt ein Objekt, das alle relevanten Informationen enthält, die zum Generieren eines Proxys erforderlich sind, der für die Kommunikation mit einem Remoteobjekt verwendet wird. (Geerbt von MarshalByRefObject) |
CreateWaitHandle() |
Veraltet.
Veraltet.
Veraltet.
Weist ein WaitHandle-Objekt zu. (Geerbt von Stream) |
Dispose() |
Gibt alle vom Streamverwendeten Ressourcen frei. (Geerbt von Stream) |
Dispose(Boolean) |
Gibt die nicht verwalteten Ressourcen frei, die vom UnmanagedMemoryStream verwendet werden, und gibt optional die verwalteten Ressourcen frei. |
DisposeAsync() |
Gibt asynchron die nicht verwalteten Ressourcen frei, die vom Streamverwendet werden. (Geerbt von Stream) |
EndRead(IAsyncResult) |
Wartet auf den Abschluss des ausstehenden asynchronen Lesevorgangs. (Verwenden Sie stattdessen ReadAsync(Byte[], Int32, Int32).) (Geerbt von Stream) |
EndWrite(IAsyncResult) |
Beendet einen asynchronen Schreibvorgang. (Verwenden Sie stattdessen WriteAsync(Byte[], Int32, Int32).) (Geerbt von Stream) |
Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
Flush() |
Überschreibt die Flush()-Methode, sodass keine Aktion ausgeführt wird. |
FlushAsync() |
Löscht asynchron alle Puffer für diesen Datenstrom und bewirkt, dass alle gepufferten Daten auf das zugrunde liegende Gerät geschrieben werden. (Geerbt von Stream) |
FlushAsync(CancellationToken) |
Überschreibt die FlushAsync(CancellationToken)-Methode, sodass der Vorgang abgebrochen wird, wenn angegeben, aber keine andere Aktion ausgeführt wird. |
FlushAsync(CancellationToken) |
Löscht asynchron alle Puffer für diesen Datenstrom, bewirkt, dass alle gepufferten Daten auf das zugrunde liegende Gerät geschrieben werden, und überwacht Abbruchanforderungen. (Geerbt von Stream) |
GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
GetLifetimeService() |
Veraltet.
Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinie für diese Instanz steuert. (Geerbt von MarshalByRefObject) |
GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
Initialize(Byte*, Int64, Int64, FileAccess) |
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse mithilfe eines Zeigers auf einen nicht verwalteten Speicherort. |
Initialize(SafeBuffer, Int64, Int64, FileAccess) |
Initialisiert eine neue Instanz der UnmanagedMemoryStream-Klasse in einem sicheren Puffer mit einem angegebenen Offset, einer bestimmten Länge und einem Dateizugriff. |
InitializeLifetimeService() |
Veraltet.
Ruft ein Lebensdauerdienstobjekt ab, um die Lebensdauerrichtlinie für diese Instanz zu steuern. (Geerbt von MarshalByRefObject) |
MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
MemberwiseClone(Boolean) |
Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts. (Geerbt von MarshalByRefObject) |
ObjectInvariant() |
Veraltet.
Bietet Unterstützung für eine Contract. (Geerbt von Stream) |
Read(Byte[], Int32, Int32) |
Liest die angegebene Anzahl von Bytes in das angegebene Array. |
Read(Span<Byte>) |
Liest alle Bytes dieses nicht verwalteten Speicherdatenstroms in die angegebene Bytespanne. |
Read(Span<Byte>) |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, liest sie eine Bytesequenz aus dem aktuellen Datenstrom und wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes. (Geerbt von Stream) |
ReadAsync(Byte[], Int32, Int32) |
Liest asynchron eine Abfolge von Bytes aus dem aktuellen Datenstrom und wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes. (Geerbt von Stream) |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Liest asynchron die angegebene Anzahl von Bytes in das angegebene Array. |
ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Liest asynchron eine Abfolge von Bytes aus dem aktuellen Datenstrom, wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes und überwacht Abbruchanforderungen. (Geerbt von Stream) |
ReadAsync(Memory<Byte>, CancellationToken) |
Liest asynchron die nicht verwalteten Speicherdatenstrombytes in den Speicherbereich. |
ReadAsync(Memory<Byte>, CancellationToken) |
Liest asynchron eine Abfolge von Bytes aus dem aktuellen Datenstrom, wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes und überwacht Abbruchanforderungen. (Geerbt von Stream) |
ReadAtLeast(Span<Byte>, Int32, Boolean) |
Liest mindestens eine Minimale Anzahl von Bytes aus dem aktuellen Datenstrom und wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes. (Geerbt von Stream) |
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Liest asynchron mindestens eine Mindestanzahl von Bytes aus dem aktuellen Datenstrom, wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes und überwacht Abbruchanforderungen. (Geerbt von Stream) |
ReadByte() |
Liest ein Byte aus einem Datenstrom und wechselt die Position innerhalb des Datenstroms um ein Byte oder gibt -1 zurück, wenn am Ende des Datenstroms. |
ReadExactly(Byte[], Int32, Int32) |
Liest |
ReadExactly(Span<Byte>) |
Liest Bytes aus dem aktuellen Datenstrom und wechselt die Position innerhalb des Datenstroms, bis die |
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Liest asynchron |
ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Liest asynchron Bytes aus dem aktuellen Datenstrom, wechselt die Position innerhalb des Datenstroms, bis die |
Seek(Int64, SeekOrigin) |
Legt die aktuelle Position des aktuellen Datenstroms auf den angegebenen Wert fest. |
SetLength(Int64) |
Legt die Länge eines Datenstroms auf einen angegebenen Wert fest. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Write(Byte[], Int32, Int32) |
Schreibt einen Byteblock mithilfe von Daten aus einem Puffer in den aktuellen Datenstrom. |
Write(ReadOnlySpan<Byte>) |
Schreibt einen Byteblock in den aktuellen nicht verwalteten Speicherstrom mithilfe von Daten aus der bereitgestellten Bytespanne. |
Write(ReadOnlySpan<Byte>) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird eine Bytesequenz in den aktuellen Datenstrom geschrieben und die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes vorangestellt. (Geerbt von Stream) |
WriteAsync(Byte[], Int32, Int32) |
Schreibt asynchron eine Bytesequenz in den aktuellen Datenstrom und wechselt die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes. (Geerbt von Stream) |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Schreibt asynchron eine Bytesequenz in den aktuellen Datenstrom, wechselt die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes und überwacht Abbruchanforderungen. |
WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Schreibt asynchron eine Bytesequenz in den aktuellen Datenstrom, wechselt die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes und überwacht Abbruchanforderungen. (Geerbt von Stream) |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Schreibt asynchron eine Spanne von Bytes in den aktuellen Datenstrom, wechselt die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes und überwacht Abbruchanforderungen. |
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Schreibt asynchron eine Bytesequenz in den aktuellen Datenstrom, wechselt die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes und überwacht Abbruchanforderungen. (Geerbt von Stream) |
WriteByte(Byte) |
Schreibt ein Byte an die aktuelle Position im Dateidatenstrom. |
Erweiterungsmethoden
CopyToAsync(Stream, PipeWriter, CancellationToken) |
Liest die Bytes asynchron aus dem Stream und schreibt sie mithilfe eines Abbruchtokens in das angegebene PipeWriter. |
AsInputStream(Stream) |
Konvertiert einen verwalteten Stream in .NET für Windows Store-Apps in einen Eingabedatenstrom in der Windows-Runtime. |
AsOutputStream(Stream) |
Konvertiert einen verwalteten Stream in .NET für Windows Store-Apps in einen Ausgabedatenstrom in der Windows-Runtime. |
AsRandomAccessStream(Stream) |
Konvertiert den angegebenen Datenstrom in einen Datenstrom mit wahllosem Zugriff. |
ConfigureAwait(IAsyncDisposable, Boolean) |
Konfiguriert, wie auf die von einem asynchronen Einweg zurückgegebenen Aufgaben gewartet wird. |