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 mit der angegebenen Position und 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 mit der angegebenen Position, Speicherlänge, Gesamtspeichergröße und den Dateizugriffswerten. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Initialisiert eine neue Instanz der UnmanagedMemoryStream-Klasse in einem sicheren Puffer mit einem angegebenen Offset, einer angegebenen Länge und angegebenem 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 mit der angegebenen Position und 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 eine nicht verwaltete Speicheradresse.
- length
- Int64
Die Länge des zu verwendenden Speichers.
- Attribute
Ausnahmen
Der Benutzer verfügt nicht über die erforderliche Berechtigung.
Der pointer
-Wert 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 veranschaulicht, wie Sie mithilfe der -Klasse aus dem nicht verwalteten Arbeitsspeicher lesen und in diesen UnmanagedMemoryStream schreiben. Ein Block nicht verwalteter Arbeitsspeicher wird mithilfe der Marshal -Klasse zugeordnet 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 instance der UnmanagedMemoryStream -Klasse und legt standardmäßig die CanWrite -Eigenschaft auf false
und die CanRead -Eigenschaft auf festtrue
. Die Length -Eigenschaft ist 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 Speicherstream enthalten soll.
- offset
- Int64
Die Byteposition im Puffer, ab der der nicht verwaltete Speicherstream beginnen soll.
- length
- Int64
Die Länge des nicht verwalteten Speicherstreams.
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 mit der angegebenen Position, Speicherlänge, Gesamtspeichergröße und den Dateizugriffswerten.
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 eine nicht verwaltete Speicheradresse.
- length
- Int64
Die Länge des zu verwendenden Speichers.
- capacity
- Int64
Die Gesamtgröße des dem Stream zugewiesenen Speichers.
- access
- FileAccess
Einer der FileAccess-Werte.
- Attribute
Ausnahmen
Der Benutzer verfügt nicht über die erforderliche Berechtigung.
Der pointer
-Wert 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 veranschaulicht, wie Sie mithilfe der -Klasse aus dem nicht verwalteten Arbeitsspeicher lesen und in diesen UnmanagedMemoryStream schreiben. Ein Block nicht verwalteter Arbeitsspeicher wird mithilfe der Marshal -Klasse zugeordnet 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 length
Parameter definiert die aktuell verwendete Arbeitsspeichermenge. Beim Lesen oder Anfügen von Daten an den Stream sollte der length
Wert gleich der Menge gültiger Daten im Datenstrom sein, aus dem gelesen oder beibehalten werden soll. Wenn Sie in den Stream schreiben, sollte dieser Wert null sein.
Der capacity
Parameter gibt die Gesamtmenge des verfügbaren Arbeitsspeichers an. Dieser Wert kann einen Bereich beschreiben, der länger als die angegebene Länge ist, oder einen Bereich angeben, an den angefügt werden kann. Jeder Versuch, über diesen Wert hinaus zu schreiben, schlägt fehl.
Der access
Parameter legt die CanReadEigenschaften , und CanWrite fest. Beachten Sie, dass die Angabe Write nicht garantiert, dass der Stream beschreibbar ist. Die Zugriffsparameter ermöglichen es dem Implementierer, ein Objekt zu erstellen, dessen Implementierung mit dem tatsächlichen Datenstrom übereinstimmen kann, der verfügbar gemacht wird.
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 angegebenen Länge und angegebenem 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 Speicherstream enthalten soll.
- offset
- Int64
Die Byteposition im Puffer, ab der der nicht verwaltete Speicherstream beginnen soll.
- length
- Int64
Die Länge des nicht verwalteten Speicherstreams.
- access
- FileAccess
Der Modus des Dateizugriffs auf den nicht verwalteten Speicherstream.