UnmanagedMemoryStream.WriteByte(Byte) Methode

Definitie

Hiermee schrijft u een byte naar de huidige positie in de bestandsstroom.

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)

Parameters

value
Byte

Een bytewaarde die naar de stream is geschreven.

Uitzonderingen

De stream is gesloten.

Het onderliggende geheugen biedt geen ondersteuning voor schrijven.

– of –

Er wordt geprobeerd om naar de stream te schrijven en de CanWrite eigenschap is false.

– of –

De huidige positie bevindt zich aan het einde van de capaciteit van de stream.

De opgegeven value oorzaak is dat de stream de maximale capaciteit overschrijdt.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u kunt lezen van en schrijven naar onbeheerd geheugen met behulp van de UnmanagedMemoryStream klasse. Er wordt een blok niet-beheerde geheugen toegewezen en de toewijzing ongedaan gemaakt met behulp van de Marshal klasse. In dit voorbeeld wordt een UnmanagedMemoryStream object doorgegeven aan een methode waarmee de CanWrite eigenschap wordt gecontroleerd voordat de gegevens naar de stream worden geschreven.

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

Van toepassing op