Compartir vía


UnmanagedMemoryStream.Write Método

Definición

Sobrecargas

Write(ReadOnlySpan<Byte>)

Escribe un bloque de bytes en la secuencia de memoria no administrada actual usando datos del intervalo de bytes proporcionado.

Write(Byte[], Int32, Int32)

Escribe un bloque de bytes en la secuencia actual utilizando los datos de un búfer.

Write(ReadOnlySpan<Byte>)

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

Escribe un bloque de bytes en la secuencia de memoria no administrada actual usando datos del intervalo de bytes proporcionado.

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))

Parámetros

sourcebuffer
ReadOnlySpan<Byte>

Intervalo de bytes desde el que se copian los bytes en la secuencia de memoria no administrada actual.

Se aplica a

Write(Byte[], Int32, Int32)

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

Escribe un bloque de bytes en la secuencia actual utilizando los datos de un búfer.

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)

Parámetros

buffer
Byte[]

Matriz de bytes de la que se copian bytes a la secuencia actual.

offset
Int32

Posición de desplazamiento en el búfer donde se comienzan a copiar bytes a la secuencia actual.

count
Int32

Número de bytes que se van a escribir en la secuencia actual.

Excepciones

La secuencia está cerrada.

La memoria subyacente no admite operaciones de escritura.

o bien

Se realiza un intento de escritura en la secuencia y el valor de la propiedad CanWrite es false.

o bien

El valor de count es mayor que la capacidad de la secuencia.

o bien

La posición está al final de la capacidad de la secuencia.

Error de E/S.

El valor de uno de los parámetros especificados es menor que cero.

El valor del parámetro offset menos la longitud del parámetro buffer es menor que el valor del parámetro count.

El parámetro buffer es null.

Ejemplos

En el ejemplo de código siguiente se muestra cómo leer y escribir en memoria no administrada mediante la UnmanagedMemoryStream clase . Se asigna un bloque de memoria no administrada y se desasigna mediante la Marshal clase .


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

Comentarios

La escritura se produce en la posición actual de la secuencia.

Se aplica a