Sdílet prostřednictvím


UnmanagedMemoryStream.Write Metoda

Definice

Přetížení

Write(ReadOnlySpan<Byte>)

Zapíše blok bajtů do aktuálního nespravovaného datového proudu paměti pomocí dat z zadaného rozsahu bajtů.

Write(Byte[], Int32, Int32)

Zapíše blok bajtů do aktuálního datového proudu pomocí dat z vyrovnávací paměti.

Write(ReadOnlySpan<Byte>)

Zdroj:
UnmanagedMemoryStream.cs
Zdroj:
UnmanagedMemoryStream.cs
Zdroj:
UnmanagedMemoryStream.cs

Zapíše blok bajtů do aktuálního nespravovaného datového proudu paměti pomocí dat z zadaného rozsahu bajtů.

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

Parametry

sourcebuffer
ReadOnlySpan<Byte>

Rozsah bajtů, ze kterého se mají kopírovat bajty do aktuálního nespravovaného datového proudu paměti.

Platí pro

Write(Byte[], Int32, Int32)

Zdroj:
UnmanagedMemoryStream.cs
Zdroj:
UnmanagedMemoryStream.cs
Zdroj:
UnmanagedMemoryStream.cs

Zapíše blok bajtů do aktuálního datového proudu pomocí dat z vyrovnávací paměti.

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)

Parametry

buffer
Byte[]

Pole bajtů, ze kterého se mají kopírovat bajty do aktuálního datového proudu.

offset
Int32

Posun ve vyrovnávací paměti, při kterém se mají začít kopírovat bajty do aktuálního datového proudu.

count
Int32

Počet bajtů pro zápis do aktuálního datového proudu.

Výjimky

Datový proud se zavře.

Základní paměť nepodporuje zápis.

-nebo-

Dojde k pokusu o zápis do datového proudu a CanWrite vlastnost je false.

-nebo-

Hodnota count je větší než kapacita datového proudu.

-nebo-

Pozice je na konci kapacity streamu.

Dojde k vstupně-výstupní chybě.

Jeden ze zadaných parametrů je menší než nula.

Parametr offset minus délka parametru buffer je menší než count parametr.

Parametr buffer je null.

Příklady

Následující příklad kódu ukazuje, jak číst z a zapisovat do nespravované paměti pomocí UnmanagedMemoryStream třídy. Blok nespravované paměti se přidělí a zruší přidělení pomocí Marshal třídy.


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

Poznámky

Zápis probíhá na aktuální pozici v datovém proudu.

Platí pro