UnmanagedMemoryStream.Write Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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.