Bagikan melalui


UnmanagedMemoryStream.Write Metode

Definisi

Overload

Write(ReadOnlySpan<Byte>)

Menulis blok byte ke aliran memori yang tidak dikelola saat ini menggunakan data dari rentang byte yang disediakan.

Write(Byte[], Int32, Int32)

Menulis blok byte ke aliran saat ini menggunakan data dari buffer.

Write(ReadOnlySpan<Byte>)

Sumber:
UnmanagedMemoryStream.cs
Sumber:
UnmanagedMemoryStream.cs
Sumber:
UnmanagedMemoryStream.cs

Menulis blok byte ke aliran memori yang tidak dikelola saat ini menggunakan data dari rentang byte yang disediakan.

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>

Rentang byte untuk menyalin byte ke aliran memori yang tidak dikelola saat ini.

Berlaku untuk

Write(Byte[], Int32, Int32)

Sumber:
UnmanagedMemoryStream.cs
Sumber:
UnmanagedMemoryStream.cs
Sumber:
UnmanagedMemoryStream.cs

Menulis blok byte ke aliran saat ini menggunakan data dari buffer.

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[]

Array byte tempat menyalin byte ke aliran saat ini.

offset
Int32

Offset dalam buffer untuk mulai menyalin byte ke aliran saat ini.

count
Int32

Jumlah byte yang akan ditulis ke aliran saat ini.

Pengecualian

Aliran ditutup.

Memori yang mendasar tidak mendukung penulisan.

-atau-

Upaya dilakukan untuk menulis ke aliran dan CanWrite properti adalah false.

-atau-

Nilainya count lebih besar dari kapasitas aliran.

-atau-

Posisi berada di akhir kapasitas aliran.

Terjadi kesalahan I/O.

Salah satu parameter yang ditentukan kurang dari nol.

Parameter offset dikurangi panjang buffer parameter kurang dari count parameter .

Parameternya buffer adalah null.

Contoh

Contoh kode berikut menunjukkan cara membaca dari dan menulis ke memori yang tidak dikelola menggunakan UnmanagedMemoryStream kelas . Blok memori yang tidak dikelola dialokasikan dan dibatalkan alokasinya Marshal menggunakan kelas .


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

Keterangan

Penulisan terjadi pada posisi saat ini di aliran.

Berlaku untuk