UnmanagedMemoryStream.Read Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
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.
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.