UnmanagedMemoryStream Constructors

Definitie

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse.

Overloads

Name Description
UnmanagedMemoryStream()

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse.

UnmanagedMemoryStream(Byte*, Int64)

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse met behulp van de opgegeven locatie en geheugenlengte.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse in een veilige buffer met een opgegeven offset en lengte.

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse met behulp van de opgegeven locatie, geheugenlengte, totale hoeveelheid geheugen en waarden voor bestandstoegang.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse in een veilige buffer met een opgegeven offset, lengte en bestandstoegang.

UnmanagedMemoryStream()

Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse.

protected:
 UnmanagedMemoryStream();
protected UnmanagedMemoryStream();
Protected Sub New ()

Uitzonderingen

De gebruiker heeft niet de vereiste machtiging.

Van toepassing op

UnmanagedMemoryStream(Byte*, Int64)

Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs

Belangrijk

Deze API is niet CLS-conform.

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse met behulp van de opgegeven locatie en geheugenlengte.

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

Parameters

pointer
Byte*

Een aanwijzer naar een onbeheerde geheugenlocatie.

length
Int64

De lengte van het te gebruiken geheugen.

Kenmerken

Uitzonderingen

De gebruiker heeft niet de vereiste machtiging.

De pointer waarde is null.

De length waarde is kleiner dan nul.

– of –

De length is groot genoeg om een overloop te veroorzaken.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u kunt lezen van en schrijven naar onbeheerd geheugen met behulp van de UnmanagedMemoryStream klasse. Er wordt een blok niet-beheerde geheugen toegewezen en de toewijzing ongedaan gemaakt met behulp van de Marshal klasse.

// 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));
    }
}

Opmerkingen

Deze constructor maakt een nieuw exemplaar van de UnmanagedMemoryStream klasse en stelt standaard de CanWrite eigenschap false in op en de CanRead eigenschap op true. De Length eigenschap is ingesteld op de waarde van de length parameter en kan niet worden gewijzigd.

Van toepassing op

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse in een veilige buffer met een opgegeven offset en lengte.

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)

Parameters

buffer
SafeBuffer

De buffer die de niet-beheerde geheugenstroom bevat.

offset
Int64

De bytepositie in de buffer waarop de onbeheerde geheugenstroom moet worden gestart.

length
Int64

De lengte van de niet-beheerde geheugenstroom.

Van toepassing op

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs

Belangrijk

Deze API is niet CLS-conform.

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse met behulp van de opgegeven locatie, geheugenlengte, totale hoeveelheid geheugen en waarden voor bestandstoegang.

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

Parameters

pointer
Byte*

Een aanwijzer naar een onbeheerde geheugenlocatie.

length
Int64

De lengte van het te gebruiken geheugen.

capacity
Int64

De totale hoeveelheid geheugen die aan de stream is toegewezen.

access
FileAccess

Een van de FileAccess waarden.

Kenmerken

Uitzonderingen

De gebruiker heeft niet de vereiste machtiging.

De pointer waarde is null.

De length waarde is kleiner dan nul.

– of –

De capacity waarde is kleiner dan nul.

– of –

De length waarde is groter dan de capacity waarde.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u kunt lezen van en schrijven naar onbeheerd geheugen met behulp van de UnmanagedMemoryStream klasse. Er wordt een blok niet-beheerde geheugen toegewezen en de toewijzing ongedaan gemaakt met behulp van de Marshal klasse.


// 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();
    }
}

Opmerkingen

De length parameter definieert de huidige hoeveelheid geheugen die in gebruik is. Als u gegevens leest of toevoegt aan de stroom, moet de length waarde gelijk zijn aan de hoeveelheid geldige gegevens in de stroom die moet worden gelezen of behouden. Als u naar de stream schrijft, moet deze waarde nul zijn.

De capacity parameter geeft de hoeveelheid beschikbaar geheugen aan. Deze waarde kan een regio beschrijven die langer is dan de opgegeven lengte of een regio aangeeft waaraan kan worden toegevoegd. Pogingen om buiten deze waarde te schrijven, mislukken.

De access parameter stelt de CanReaden CanWrite eigenschappen in. Houd er rekening mee Write dat opgeven niet garandeert dat de stream beschrijfbaar is. Met de toegangsparameters kan de implementeerfunctie een object maken waarvan de implementatie overeenkomt met de werkelijke stroom die wordt weergegeven.

Van toepassing op

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs
Bron:
UnmanagedMemoryStream.cs

Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse in een veilige buffer met een opgegeven offset, lengte en bestandstoegang.

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)

Parameters

buffer
SafeBuffer

De buffer die de niet-beheerde geheugenstroom bevat.

offset
Int64

De bytepositie in de buffer waarop de onbeheerde geheugenstroom moet worden gestart.

length
Int64

De lengte van de niet-beheerde geheugenstroom.

access
FileAccess

De modus voor bestandstoegang tot de niet-beheerde geheugenstroom.

Van toepassing op