Bagikan melalui


UnmanagedMemoryStream.Read Metode

Definisi

Overload

Read(Span<Byte>)

Membaca semua byte aliran memori yang tidak dikelola ini ke dalam rentang byte yang ditentukan.

Read(Byte[], Int32, Int32)

Membaca jumlah byte yang ditentukan ke dalam array yang ditentukan.

Read(Span<Byte>)

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

Membaca semua byte aliran memori yang tidak dikelola ini ke dalam rentang byte yang ditentukan.

public:
 override int Read(Span<System::Byte> destination);
public:
 override int Read(Span<System::Byte> buffer);
public override int Read (Span<byte> destination);
public override int Read (Span<byte> buffer);
override this.Read : Span<byte> -> int
override this.Read : Span<byte> -> int
Public Overrides Function Read (destination As Span(Of Byte)) As Integer
Public Overrides Function Read (buffer As Span(Of Byte)) As Integer

Parameter

destinationbuffer
Span<Byte>

Ketika metode ini kembali, rentang ini berisi semua byte dari aliran memori yang tidak dikelola.

Mengembalikan

Jumlah total byte yang dibaca ke tujuan.

Berlaku untuk

Read(Byte[], Int32, Int32)

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

Membaca jumlah byte yang ditentukan ke dalam array yang ditentukan.

public:
 override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Parameter

buffer
Byte[]

Ketika metode ini kembali, berisi array byte yang ditentukan dengan nilai antara offset dan (offset + count - 1) digantikan oleh byte yang dibaca dari sumber saat ini. Parameter ini diteruskan tanpa diinisialisasi.

offset
Int32

Offset byte berbasis nol untuk buffer mulai menyimpan data yang dibaca dari aliran saat ini.

count
Int32

Jumlah maksimum byte yang akan dibaca dari aliran saat ini.

Mengembalikan

Jumlah total byte yang dibaca ke dalam buffer. Ini bisa kurang dari jumlah byte yang diminta jika banyak byte saat ini tidak tersedia, atau nol (0) jika akhir aliran telah tercapai.

Pengecualian

Aliran ditutup.

Memori yang mendasar tidak mendukung pembacaan.

-atau-

Properti CanRead diatur ke false.

Parameter buffer diatur ke null.

Parameternya offset kurang dari nol.

-atau-

Parameternya count kurang dari nol.

Panjang array buffer dikurangi offset parameter kurang dari count parameter .

Contoh

Contoh kode berikut menunjukkan cara membaca dari dan menulis ke memori yang tidak dikelola menggunakan UnmanagedMemoryStream kelas . Blok memori tidak terkelola dialokasikan dan tidak dialokasikan menggunakan Marshal 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

Parameter offset memberikan offset byte dalam array parameter (indeks buffer) di mana untuk mulai membaca, dan count parameter memberikan jumlah maksimum byte yang akan dibaca dari aliran ini. Nilai yang dikembalikan adalah jumlah aktual byte yang dibaca, atau nol jika akhir aliran tercapai. Jika operasi baca berhasil, posisi aliran saat ini dimajukan dengan jumlah byte yang dibaca. Jika terjadi pengecualian, posisi aliran saat ini tidak berubah.

Metode mengembalikan Read nol hanya setelah mencapai akhir aliran. Jika tidak, Read selalu baca setidaknya satu byte dari aliran sebelum kembali. Jika tidak ada data yang tersedia dari aliran setelah panggilan ke Read, metode akan memblokir hingga setidaknya satu byte data dapat dikembalikan. Implementasi gratis untuk mengembalikan lebih sedikit byte daripada yang diminta bahkan jika akhir aliran belum tercapai.

Berlaku untuk