Partager via


UnmanagedMemoryStream Constructeurs

Définition

Initialise une nouvelle instance de la classe UnmanagedMemoryStream.

Surcharges

Nom Description
UnmanagedMemoryStream()

Initialise une nouvelle instance de la classe UnmanagedMemoryStream.

UnmanagedMemoryStream(Byte*, Int64)

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

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Initialise une nouvelle instance de la UnmanagedMemoryStream classe 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 à l’aide de l’emplacement, de la UnmanagedMemoryStream longueur de la mémoire, de la quantité totale de mémoire et des valeurs d’accès aux fichiers spécifiées.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

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

UnmanagedMemoryStream()

Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs
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 n’a pas l’autorisation requise.

S’applique à

UnmanagedMemoryStream(Byte*, Int64)

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

Important

Cette API n’est pas conforme CLS.

Initialise une nouvelle instance de la UnmanagedMemoryStream classe à l’aide de l’emplacement et de la longueur de 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 mémoire non managé.

length
Int64

Longueur de la mémoire à utiliser.

Attributs

Exceptions

L’utilisateur n’a pas l’autorisation requise.

La pointer valeur est null.

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

- ou -

La length taille est suffisante 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ésaffecté à 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é truesur . 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
Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs

Initialise une nouvelle instance de la UnmanagedMemoryStream classe 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 contenant le flux de mémoire non managée.

offset
Int64

Position d’octet dans la mémoire tampon à laquelle démarrer le flux de mémoire non managée.

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
Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs

Important

Cette API n’est pas conforme CLS.

Initialise une nouvelle instance de la classe à l’aide de l’emplacement, de la UnmanagedMemoryStream longueur de la mémoire, de la quantité totale de mémoire et des valeurs d’accès aux fichiers spécifiées.

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 mémoire non managé.

length
Int64

Longueur de la mémoire à utiliser.

capacity
Int64

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

access
FileAccess

Une des FileAccess valeurs.

Attributs

Exceptions

L’utilisateur n’a pas l’autorisation requise.

La pointer valeur est null.

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

- ou -

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

- ou -

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

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ésaffecté à 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 en cours d’utilisation. Si vous lisez ou ajoutez des 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 plus longue que la longueur spécifiée ou indiquer une région à laquelle il est possible d’ajouter. Toute tentative d’écriture au-delà de cette valeur échoue.

Le access paramètre définit les propriétés et CanWrite les CanReadpropriétés. Notez que la spécification Write 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
Source:
UnmanagedMemoryStream.cs
Source:
UnmanagedMemoryStream.cs

Initialise une nouvelle instance de la UnmanagedMemoryStream classe dans une mémoire tampon sécurisée avec un décalage, une longueur et un 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 contenant le flux de mémoire non managée.

offset
Int64

Position d’octet dans la mémoire tampon à laquelle démarrer le flux de mémoire non managée.

length
Int64

Longueur du flux de mémoire non managé.

access
FileAccess

Mode d’accès au fichier au flux de mémoire non managé.

S’applique à