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