Teilen über


UnmanagedMemoryStream Konstruktoren

Definition

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.

Gilt für: