UnmanagedMemoryStream.Write Yöntem

Tanım

Aşırı Yüklemeler

Write(ReadOnlySpan<Byte>)

Sağlanan bayt aralığındaki verileri kullanarak geçerli yönetilmeyen bellek akışına bir bayt bloğu yazar.

Write(Byte[], Int32, Int32)

Arabellekten alınan verileri kullanarak geçerli akışa bir bayt bloğu yazar.

Write(ReadOnlySpan<Byte>)

Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs

Sağlanan bayt aralığındaki verileri kullanarak geçerli yönetilmeyen bellek akışına bir bayt bloğu yazar.

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

Parametreler

sourcebuffer
ReadOnlySpan<Byte>

Baytların geçerli yönetilmeyen bellek akışına kopyalandığı baytların yayılması.

Şunlara uygulanır

Write(Byte[], Int32, Int32)

Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs

Arabellekten alınan verileri kullanarak geçerli akışa bir bayt bloğu yazar.

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)

Parametreler

buffer
Byte[]

Baytların geçerli akışa kopyalandığı bayt dizisi.

offset
Int32

Geçerli akışa bayt kopyalamaya başlanacak arabellekteki uzaklık.

count
Int32

Geçerli akışa yazacak bayt sayısı.

Özel durumlar

Akış kapatılır.

Temel alınan bellek yazmayı desteklemez.

-veya-

Akışa CanWrite yazma girişiminde bulunulup özelliği şeklindedir false.

-veya-

count Değer, akışın kapasitesinden büyüktür.

-veya-

Konum, akış kapasitesinin sonundadır.

Bir G/Ç hatası oluşur.

Belirtilen parametrelerden biri sıfırdan küçük.

offset Parametresi eksi parametresinin buffer uzunluğu parametresinden count küçüktür.

buffer parametresidirnull.

Örnekler

Aşağıdaki kod örneği, sınıfını kullanarak yönetilmeyen bellekten okuma ve yazma işlemini UnmanagedMemoryStream gösterir. Yönetilmeyen bellek bloğu ayrılır ve sınıfı kullanılarak Marshal ayrılmıştır.


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

Açıklamalar

Yazma işlemi akışın geçerli konumunda gerçekleşir.

Şunlara uygulanır