Partager via


UnmanagedMemoryStream Constructeurs

Définition

Initialise une nouvelle instance de la classe UnmanagedMemoryStream.

Surcharges

UnmanagedMemoryStream()

Initialise une nouvelle instance de la classe UnmanagedMemoryStream.

UnmanagedMemoryStream(Byte*, Int64)

Initialise une nouvelle instance de la classe UnmanagedMemoryStream à l'aide de l'emplacement et de la taille de la mémoire spécifiés.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Initialise une nouvelle instance de la classe UnmanagedMemoryStream dans une mémoire tampon sécurisée avec un décalage et une longueur spécifiés.

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

Initialise une nouvelle instance de la classe UnmanagedMemoryStream à l'aide des valeurs spécifiées pour l'emplacement, la taille et la quantité totale de la mémoire, ainsi que l'accès au fichier.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

Initialise une nouvelle instance de la classe UnmanagedMemoryStream dans une mémoire tampon sécurisée avec un décalage, une longueur et l'accès au fichier spécifiés.

UnmanagedMemoryStream()

Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs

Initialise une nouvelle instance de la classe UnmanagedMemoryStream.

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

Exceptions

L’utilisateur ne dispose pas de l’autorisation nécessaire.

S’applique à

UnmanagedMemoryStream(Byte*, Int64)

Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs

Important

Cette API n’est pas conforme CLS.

Initialise une nouvelle instance de la classe UnmanagedMemoryStream à l'aide de l'emplacement et de la taille de la mémoire spécifiés.

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

Paramètres

pointer
Byte*

Pointeur vers un emplacement de la mémoire non managée.

length
Int64

Longueur de la mémoire à utiliser.

Attributs

Exceptions

L’utilisateur ne dispose pas de l’autorisation nécessaire.

pointer a la valeur null.

La valeur length est inférieure à zéro.

- ou -

La longueur (length) est suffisamment grande pour provoquer un dépassement de capacité.

Exemples

L’exemple de code suivant montre comment lire et écrire dans la mémoire non managée à l’aide de la UnmanagedMemoryStream classe . Un bloc de mémoire non managée est alloué et désalloué à l’aide de la Marshal classe .

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

Remarques

Ce constructeur crée une nouvelle instance de la UnmanagedMemoryStream classe et définit par défaut la CanWrite propriété sur false et la CanRead propriété sur true. La Length propriété est définie sur la valeur du length paramètre et ne peut pas être modifiée.

S’applique à

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs

Initialise une nouvelle instance de la classe UnmanagedMemoryStream dans une mémoire tampon sécurisée avec un décalage et une longueur spécifiés.

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)

Paramètres

buffer
SafeBuffer

Mémoire tampon devant contenir le flux de mémoire non managé.

offset
Int64

Position d'octet dans la mémoire tampon à partir de laquelle commencer le flux de mémoire non managé.

length
Int64

Longueur du flux de mémoire non managé.

S’applique à

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs

Important

Cette API n’est pas conforme CLS.

Initialise une nouvelle instance de la classe UnmanagedMemoryStream à l'aide des valeurs spécifiées pour l'emplacement, la taille et la quantité totale de la mémoire, ainsi que l'accès au fichier.

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

Paramètres

pointer
Byte*

Pointeur vers un emplacement de la mémoire non managée.

length
Int64

Longueur de la mémoire à utiliser.

capacity
Int64

Quantité totale de mémoire assignée au flux.

access
FileAccess

Une des valeurs de l'objet FileAccess.

Attributs

Exceptions

L’utilisateur ne dispose pas de l’autorisation nécessaire.

pointer a la valeur null.

La valeur length est inférieure à zéro.

- ou -

La valeur capacity est inférieure à zéro.

- ou -

La valeur length est supérieure à la valeur capacity.

Exemples

L’exemple de code suivant montre comment lire et écrire dans la mémoire non managée à l’aide de la UnmanagedMemoryStream classe . Un bloc de mémoire non managée est alloué et désalloué à l’aide de la Marshal classe .


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

Remarques

Le length paramètre définit la quantité actuelle de mémoire utilisée. Lors de la lecture ou de l’ajout de données au flux, la length valeur doit être égale à la quantité de données valides dans le flux à lire ou à conserver. Si vous écrivez dans le flux, cette valeur doit être égale à zéro.

Le capacity paramètre indique la quantité totale de mémoire disponible. Cette valeur peut décrire une région qui est plus longue que la longueur spécifiée, ou indiquer une région qui peut être ajoutée. Toute tentative d’écriture au-delà de cette valeur échoue.

Le access paramètre définit les CanReadpropriétés , et CanWrite . Notez que la Write spécification ne garantit pas que le flux sera accessible en écriture. Les paramètres d’accès permettent à l’implémenteur de créer un objet dont l’implémentation peut correspondre au flux réel exposé.

S’applique à

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs

Initialise une nouvelle instance de la classe UnmanagedMemoryStream dans une mémoire tampon sécurisée avec un décalage, une longueur et l'accès au fichier spécifiés.

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)

Paramètres

buffer
SafeBuffer

Mémoire tampon devant contenir le flux de mémoire non managé.

offset
Int64

Position d'octet dans la mémoire tampon à partir de laquelle commencer le flux de mémoire non managé.

length
Int64

Longueur du flux de mémoire non managé.

access
FileAccess

Mode d'accès au fichier sur le flux de mémoire non managé.

S’applique à