UnmanagedMemoryStream.Write Méthode

Définition

Surcharges

Nom Description
Write(ReadOnlySpan<Byte>)

Écrit un bloc d’octets dans le flux de mémoire non managé actuel à l’aide de données de l’étendue fournie d’octets.

Write(Byte[], Int32, Int32)

Écrit un bloc d’octets dans le flux actuel à l’aide de données d’une mémoire tampon.

Write(ReadOnlySpan<Byte>)

Écrit un bloc d’octets dans le flux de mémoire non managé actuel à l’aide de données de l’étendue fournie d’octets.

public:
 override void Write(ReadOnlySpan<System::Byte> source);
public override void Write(ReadOnlySpan<byte> source);
override this.Write : ReadOnlySpan<byte> -> unit
Public Overrides Sub Write (source As ReadOnlySpan(Of Byte))

Paramètres

sourcebuffer
ReadOnlySpan<Byte>

Étendue d’octets à partir de laquelle copier des octets dans le flux de mémoire non managé actuel.

S’applique à

Write(Byte[], Int32, Int32)

Écrit un bloc d’octets dans le flux actuel à l’aide de données d’une mémoire tampon.

public:
 override void Write(cli::array <System::Byte> ^ buffer, int offset, int count);
public override void Write(byte[] buffer, int offset, int count);
override this.Write : byte[] * int * int -> unit
Public Overrides Sub Write (buffer As Byte(), offset As Integer, count As Integer)

Paramètres

buffer
Byte[]

Tableau d’octets à partir duquel copier des octets dans le flux actuel.

offset
Int32

Décalage dans la mémoire tampon à partir duquel commencer la copie d’octets dans le flux actuel.

count
Int32

Nombre d’octets à écrire dans le flux actuel.

Exceptions

Le flux est fermé.

La mémoire sous-jacente ne prend pas en charge l’écriture.

-ou-

Une tentative est effectuée pour écrire dans le flux et la CanWrite propriété est false.

-ou-

La count valeur est supérieure à la capacité du flux.

-ou-

La position se trouve à la fin de la capacité du flux.

Une erreur d’E/S se produit.

L’un des paramètres spécifiés est inférieur à zéro.

Le offset paramètre moins la longueur du buffer paramètre est inférieur au count paramètre.

Le buffer paramètre est null.

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

L’écriture se produit à la position actuelle dans le flux.

S’applique à