UnmanagedMemoryStream.WriteByte(Byte) Methode

Definition

Schreibt ein Byte an die aktuelle Position im Dateistream.

public:
 override void WriteByte(System::Byte value);
public override void WriteByte (byte value);
override this.WriteByte : byte -> unit
Public Overrides Sub WriteByte (value As Byte)

Parameter

value
Byte

Ein Bytewert, der in den Stream geschrieben werden soll.

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 -

Die aktuelle Position befindet sich am Ende der Kapazität des Streams.

Der angegebene value verursacht das Überschreiten der maximalen Kapazität des Streams.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie mithilfe der -Klasse aus dem nicht verwalteten Arbeitsspeicher lesen und in diesen UnmanagedMemoryStream schreiben. Ein Block nicht verwalteter Arbeitsspeicher wird mithilfe der Marshal -Klasse zugeordnet und aufgehoben. In diesem Beispiel wird ein UnmanagedMemoryStream -Objekt an eine -Methode übergeben, die die CanWrite -Eigenschaft überprüft, bevor versucht wird, die Daten in den Stream zu schreiben.

// 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.Runtime.InteropServices;
using System.Text;

unsafe class Program
{
    static void Main()
    {
        // Create some data to write.
        byte[] text = UnicodeEncoding.Unicode.GetBytes("Data to write.");

        // Allocate a block of unmanaged memory.
        IntPtr memIntPtr = Marshal.AllocHGlobal(text.Length);

        // Get a byte pointer from the unmanaged memory block.
        byte* memBytePtr = (byte*)memIntPtr.ToPointer();

        UnmanagedMemoryStream writeStream =
            new UnmanagedMemoryStream(
            memBytePtr, text.Length, text.Length, FileAccess.Write);

        // Write the data.
        WriteToStream(writeStream, text);

        // Close the stream.
        writeStream.Close();

        // Create another UnmanagedMemoryStream for reading.
        UnmanagedMemoryStream readStream =
            new UnmanagedMemoryStream(memBytePtr, text.Length);

        // Display the contents of the stream to the console.
        PrintStream(readStream);

        // Close the reading stream.
        readStream.Close();

        // Free up the unmanaged memory.
        Marshal.FreeHGlobal(memIntPtr);
    }

    public static void WriteToStream(UnmanagedMemoryStream writeStream, byte[] text)
    {
        // Verify that the stream is writable:
        // By default, UnmanagedMemoryStream objects do not have write access,
        // write access must be set explicitly.
        if (writeStream.CanWrite)
        {
            // Write the data, byte by byte
            for (int i = 0; i < writeStream.Length; i++)
            {
                writeStream.WriteByte(text[i]);
            }
        }
    }

    public static void PrintStream(UnmanagedMemoryStream readStream)
    {
        byte[] text = new byte[readStream.Length];
        // Verify that the stream is writable:
        // By default, UnmanagedMemoryStream objects do not have write access,
        // write access must be set explicitly.
        if (readStream.CanRead)
        {
            // Write the data, byte by byte
            for (int i = 0; i < readStream.Length; i++)
            {
                text[i] = (byte)readStream.ReadByte();
            }
        }

        Console.WriteLine(UnicodeEncoding.Unicode.GetString(text));
    }
}

Gilt für: