UnmanagedMemoryStream Konstruktoren
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.
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse.
Überlädt
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(SafeBuffer, Int64, Int64) |
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse in einem sicheren Puffer mit einem angegebenen Offset und einer angegebenen Lä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, FileAccess) |
Initialisiert eine neue Instanz der UnmanagedMemoryStream-Klasse in einem sicheren Puffer mit einem angegebenen Offset, einer bestimmten Länge und einem Dateizugriff. |
UnmanagedMemoryStream()
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse.
protected:
UnmanagedMemoryStream();
protected UnmanagedMemoryStream ();
Protected Sub New ()
Ausnahmen
Der Benutzer verfügt nicht über die erforderliche Berechtigung.
Gilt für:
UnmanagedMemoryStream(Byte*, Int64)
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
Wichtig
Diese API ist nicht CLS-kompatibel.
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse mithilfe des angegebenen Speicherorts und der angegebenen Speicherlänge.
public:
UnmanagedMemoryStream(System::Byte* pointer, long length);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public UnmanagedMemoryStream (byte* pointer, long length);
[System.CLSCompliant(false)]
public UnmanagedMemoryStream (byte* pointer, long length);
public UnmanagedMemoryStream (byte* pointer, long length);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 -> System.IO.UnmanagedMemoryStream
[<System.CLSCompliant(false)>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 -> System.IO.UnmanagedMemoryStream
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 -> System.IO.UnmanagedMemoryStream
Parameter
- pointer
- Byte*
Ein Zeiger auf einen nicht verwalteten Speicherspeicherort.
- length
- Int64
Die Länge des zu verwendenden Arbeitsspeichers.
- Attribute
Ausnahmen
Der Benutzer verfügt nicht über die erforderliche Berechtigung.
Der wert pointer
ist null
.
Der length
Wert ist kleiner als 0.
-oder-
Die length
ist groß genug, um einen Überlauf zu verursachen.
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.Runtime.InteropServices;
using System.Text;
unsafe class Program
{
static void Main()
{
// Create some data to write.
byte[] text = UnicodeEncoding.Unicode.GetBytes("Data to write.");
// Allocate a block of unmanaged memory.
IntPtr memIntPtr = Marshal.AllocHGlobal(text.Length);
// Get a byte pointer from the unmanaged memory block.
byte* memBytePtr = (byte*)memIntPtr.ToPointer();
UnmanagedMemoryStream writeStream =
new UnmanagedMemoryStream(
memBytePtr, text.Length, text.Length, FileAccess.Write);
// Write the data.
WriteToStream(writeStream, text);
// Close the stream.
writeStream.Close();
// Create another UnmanagedMemoryStream for reading.
UnmanagedMemoryStream readStream =
new UnmanagedMemoryStream(memBytePtr, text.Length);
// Display the contents of the stream to the console.
PrintStream(readStream);
// Close the reading stream.
readStream.Close();
// Free up the unmanaged memory.
Marshal.FreeHGlobal(memIntPtr);
}
public static void WriteToStream(UnmanagedMemoryStream writeStream, byte[] text)
{
// Verify that the stream is writable:
// By default, UnmanagedMemoryStream objects do not have write access,
// write access must be set explicitly.
if (writeStream.CanWrite)
{
// Write the data, byte by byte
for (int i = 0; i < writeStream.Length; i++)
{
writeStream.WriteByte(text[i]);
}
}
}
public static void PrintStream(UnmanagedMemoryStream readStream)
{
byte[] text = new byte[readStream.Length];
// Verify that the stream is writable:
// By default, UnmanagedMemoryStream objects do not have write access,
// write access must be set explicitly.
if (readStream.CanRead)
{
// Write the data, byte by byte
for (int i = 0; i < readStream.Length; i++)
{
text[i] = (byte)readStream.ReadByte();
}
}
Console.WriteLine(UnicodeEncoding.Unicode.GetString(text));
}
}
Hinweise
Dieser Konstruktor erstellt eine neue Instanz der UnmanagedMemoryStream Klasse und legt standardmäßig die eigenschaft CanWrite auf false
und die eigenschaft CanRead auf true
fest. Die Length-Eigenschaft wird auf den Wert des length
Parameters festgelegt und kann nicht geändert werden.
Gilt für:
UnmanagedMemoryStream(SafeBuffer, Int64, Int64)
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse in einem sicheren Puffer mit einem angegebenen Offset und einer angegebenen Länge.
public:
UnmanagedMemoryStream(System::Runtime::InteropServices::SafeBuffer ^ buffer, long offset, long length);
public UnmanagedMemoryStream (System.Runtime.InteropServices.SafeBuffer buffer, long offset, long length);
new System.IO.UnmanagedMemoryStream : System.Runtime.InteropServices.SafeBuffer * int64 * int64 -> System.IO.UnmanagedMemoryStream
Public Sub New (buffer As SafeBuffer, offset As Long, length As Long)
Parameter
- buffer
- SafeBuffer
Der Puffer, der den nicht verwalteten Speicherdatenstrom enthält.
- offset
- Int64
Die Byteposition im Puffer, an der der nicht verwaltete Speicherdatenstrom gestartet werden soll.
- length
- Int64
Die Länge des nicht verwalteten Speicherdatenstroms.
Gilt für:
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
Wichtig
Diese API ist nicht CLS-kompatibel.
Initialisiert eine neue Instanz der UnmanagedMemoryStream Klasse unter Verwendung des angegebenen Speicherorts, der Arbeitsspeicherlänge, der Gesamtmenge des Arbeitsspeichers und der Dateizugriffswerte.
public:
UnmanagedMemoryStream(System::Byte* pointer, long length, long capacity, System::IO::FileAccess access);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public UnmanagedMemoryStream (byte* pointer, long length, long capacity, System.IO.FileAccess access);
[System.CLSCompliant(false)]
public UnmanagedMemoryStream (byte* pointer, long length, long capacity, System.IO.FileAccess access);
public UnmanagedMemoryStream (byte* pointer, long length, long capacity, System.IO.FileAccess access);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
[<System.CLSCompliant(false)>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
Parameter
- pointer
- Byte*
Ein Zeiger auf einen nicht verwalteten Speicherspeicherort.
- length
- Int64
Die Länge des zu verwendenden Arbeitsspeichers.
- capacity
- Int64
Die Gesamtmenge des Arbeitsspeichers, der dem Datenstrom zugewiesen ist.
- access
- FileAccess
Einer der FileAccess Werte.
- Attribute
Ausnahmen
Der Benutzer verfügt nicht über die erforderliche Berechtigung.
Der wert pointer
ist null
.
Der length
Wert ist kleiner als 0.
-oder-
Der capacity
Wert ist kleiner als 0.
-oder-
Der length
Wert ist größer als der capacity
Wert.
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
Der parameter length
definiert die aktuelle Menge des verwendeten Arbeitsspeichers. Wenn Sie Daten an den Datenstrom lesen oder anfügen, sollte der length
Wert der Menge gültiger Daten im Datenstrom entsprechen, aus der gelesen oder beibehalten werden soll. Wenn Sie in den Datenstrom schreiben, sollte dieser Wert null sein.
Der parameter capacity
gibt die Menge des verfügbaren Gesamtspeichers an. Dieser Wert kann einen Bereich beschreiben, der länger als die angegebene Länge ist, oder einen Bereich angeben, der angefügt werden kann. Jeder Versuch, über diesen Wert hinaus zu schreiben, schlägt fehl.
Der parameter access
legt die eigenschaften CanReadund CanWrite fest. Beachten Sie, dass das Angeben von Write nicht garantiert, dass der Datenstrom schreibbar ist. Mit den Zugriffsparametern kann der Implementierer ein Objekt erstellen, dessen Implementierung mit dem tatsächlich verfügbar gemachten Datenstrom übereinstimmen kann.
Gilt für:
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
Initialisiert eine neue Instanz der UnmanagedMemoryStream-Klasse in einem sicheren Puffer mit einem angegebenen Offset, einer bestimmten Länge und einem Dateizugriff.
public:
UnmanagedMemoryStream(System::Runtime::InteropServices::SafeBuffer ^ buffer, long offset, long length, System::IO::FileAccess access);
public UnmanagedMemoryStream (System.Runtime.InteropServices.SafeBuffer buffer, long offset, long length, System.IO.FileAccess access);
new System.IO.UnmanagedMemoryStream : System.Runtime.InteropServices.SafeBuffer * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
Public Sub New (buffer As SafeBuffer, offset As Long, length As Long, access As FileAccess)
Parameter
- buffer
- SafeBuffer
Der Puffer, der den nicht verwalteten Speicherdatenstrom enthält.
- offset
- Int64
Die Byteposition im Puffer, an der der nicht verwaltete Speicherdatenstrom gestartet werden soll.
- length
- Int64
Die Länge des nicht verwalteten Speicherdatenstroms.
- access
- FileAccess
Der Modus des Dateizugriffs auf den nicht verwalteten Speicherdatenstrom.