UnmanagedMemoryStream.Write Método

Definición

Sobrecargas

Nombre Description
Write(ReadOnlySpan<Byte>)

Escribe un bloque de bytes en el flujo de memoria no administrado actual mediante datos del intervalo de bytes proporcionado.

Write(Byte[], Int32, Int32)

Escribe un bloque de bytes en el flujo actual mediante datos de un búfer.

Write(ReadOnlySpan<Byte>)

Escribe un bloque de bytes en el flujo de memoria no administrado actual mediante datos del intervalo de bytes proporcionado.

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

Parámetros

sourcebuffer
ReadOnlySpan<Byte>

Intervalo de bytes desde los que se van a copiar bytes en la secuencia de memoria no administrada actual.

Se aplica a

Write(Byte[], Int32, Int32)

Escribe un bloque de bytes en el flujo actual mediante 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 desde la que se van a copiar bytes en la secuencia actual.

offset
Int32

Desplazamiento en el búfer en el que se van a empezar a copiar bytes en 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 la escritura.

O bien

Se intenta escribir en la secuencia y la CanWrite propiedad es false.

O bien

El count valor es mayor que la capacidad del flujo.

O bien

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

Se produce un error de E/S.

Uno de los parámetros especificados es menor que cero.

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

El buffer parámetro 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