Condividi tramite


UnmanagedMemoryStream.Write Metodo

Definizione

Overload

Write(ReadOnlySpan<Byte>)

Scrive un blocco di byte nel flusso di memoria non gestita corrente usando i dati dell'intervallo di byte specificato.

Write(Byte[], Int32, Int32)

Scrive un blocco di byte nel flusso corrente usando dati da un buffer.

Write(ReadOnlySpan<Byte>)

Origine:
UnmanagedMemoryStream.cs
Origine:
UnmanagedMemoryStream.cs
Origine:
UnmanagedMemoryStream.cs

Scrive un blocco di byte nel flusso di memoria non gestita corrente usando i dati dell'intervallo di byte specificato.

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

Parametri

sourcebuffer
ReadOnlySpan<Byte>

Intervallo di byte da cui copiare i byte nel flusso di memoria non gestita corrente.

Si applica a

Write(Byte[], Int32, Int32)

Origine:
UnmanagedMemoryStream.cs
Origine:
UnmanagedMemoryStream.cs
Origine:
UnmanagedMemoryStream.cs

Scrive un blocco di byte nel flusso corrente usando dati da un buffer.

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)

Parametri

buffer
Byte[]

Matrice di byte da cui copiare i byte nel flusso corrente.

offset
Int32

Offset nel buffer da cui avviare la copia dei byte nel flusso corrente.

count
Int32

Numero di byte da scrivere nel flusso corrente.

Eccezioni

Il flusso è chiuso.

La memoria sottostante non supporta la scrittura.

-oppure-

È stato eseguito un tentativo di scrittura nel flusso e la proprietà CanWrite è false.

-oppure-

Il valore count è maggiore della capacità del flusso.

-oppure-

La posizione è alla fine della capacità del flusso.

Si è verificato un errore di I/O.

Uno dei parametri specificati è minore di zero.

Il parametro offset meno la lunghezza del parametro buffer è minore del parametro count.

Il valore del parametro buffer è null.

Esempio

Nell'esempio di codice seguente viene illustrato come leggere e scrivere in memoria non gestita usando la UnmanagedMemoryStream classe . Un blocco di memoria non gestita viene allocato e de-allocato usando 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();
    }
}

Commenti

La scrittura si verifica nella posizione corrente nel flusso.

Si applica a