Freigeben über


UnmanagedMemoryStream.Write Methode

Definition

Überlädt

Write(ReadOnlySpan<Byte>)

Schreibt einen Block von Bytes in den aktuellen nicht verwalteten Arbeitsspeicherstream, wobei Daten aus der angegebenen Spanne von Bytes verwendet werden.

Write(Byte[], Int32, Int32)

Schreibt einen Byteblock mit den Daten aus einem Puffer in den aktuellen Stream.

Write(ReadOnlySpan<Byte>)

Quelle:
UnmanagedMemoryStream.cs
Quelle:
UnmanagedMemoryStream.cs
Quelle:
UnmanagedMemoryStream.cs

Schreibt einen Block von Bytes in den aktuellen nicht verwalteten Arbeitsspeicherstream, wobei Daten aus der angegebenen Spanne von Bytes verwendet werden.

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

Parameter

sourcebuffer
ReadOnlySpan<Byte>

Die Spanne der Bytes, aus denen die Bytes in den aktuellen nicht verwalteten Arbeitsspeicherstream kopiert werden sollen.

Gilt für:

Write(Byte[], Int32, Int32)

Quelle:
UnmanagedMemoryStream.cs
Quelle:
UnmanagedMemoryStream.cs
Quelle:
UnmanagedMemoryStream.cs

Schreibt einen Byteblock mit den Daten aus einem Puffer in den aktuellen Stream.

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)

Parameter

buffer
Byte[]

Das Bytearray, aus dem Bytes in den aktuellen Stream kopiert werden sollen.

offset
Int32

Der Offset im Puffer, ab dem Bytes in den aktuellen Stream kopiert werden sollen.

count
Int32

Die Anzahl der Bytes, die in den aktuellen Stream geschrieben werden sollen.

Ausnahmen

Der Stream ist geschlossen.

Der zugrunde liegende Speicher unterstützt keine Schreibvorgänge.

- oder -

Es wird versucht, in den Stream zu schreiben, und die CanWrite-Eigenschaft ist false.

- oder -

Der count-Wert ist größer als die Kapazität des Streams.

- oder -

Die Position befindet sich am Ende der Streamkapazität.

Ein E/A-Fehler tritt auf.

Einer der angegebenen Parameter ist kleiner als 0.

Der offset-Parameter minus der Länge des buffer-Parameters ist kleiner als der count-Parameter.

Der buffer-Parameter ist null.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie mithilfe der -Klasse aus nicht verwaltetem Arbeitsspeicher lesen und in diesen UnmanagedMemoryStream schreiben. Ein Block des nicht verwalteten Arbeitsspeichers wird mithilfe der Marshal -Klasse zugewiesen und aufgehoben.


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

Hinweise

Das Schreiben erfolgt an der aktuellen Position im Stream.

Gilt für: