Partage via


UnmanagedMemoryStream.Write Méthode

Définition

Surcharges

Write(ReadOnlySpan<Byte>)

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

Write(Byte[], Int32, Int32)

Écrit un bloc d'octets dans le flux actuel en utilisant les données d'une mémoire tampon.

Write(ReadOnlySpan<Byte>)

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

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

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

Paramètres

sourcebuffer
ReadOnlySpan<Byte>

Plage d’octets à partir de laquelle copier les octets dans le flux de mémoire non managé actuel.

S’applique à

Write(Byte[], Int32, Int32)

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

Écrit un bloc d'octets dans le flux actuel en utilisant les 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 les octets peuvent être copiés vers le flux actuel.

offset
Int32

Dans la mémoire tampon, offset à partir duquel commence la copie des 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 d’écriture dans le flux a été effectuée, et la propriété CanWrite est false.

- ou -

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

- ou -

La position est à la fin de la capacité du flux.

Une erreur d’E/S se produit.

Un des paramètres spécifiés est inférieur à zéro.

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

Le paramètre buffer a la valeur 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 à