UnmanagedMemoryStream.Read Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Aşırı Yüklemeler
Read(Span<Byte>) |
Bu yönetilmeyen bellek akışının tüm baytlarını belirtilen bayt aralığına okur. |
Read(Byte[], Int32, Int32) |
Belirtilen bayt sayısını belirtilen diziye okur. |
Read(Span<Byte>)
- Kaynak:
- UnmanagedMemoryStream.cs
- Kaynak:
- UnmanagedMemoryStream.cs
- Kaynak:
- UnmanagedMemoryStream.cs
Bu yönetilmeyen bellek akışının tüm baytlarını belirtilen bayt aralığına okur.
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
Parametreler
Bu yöntem döndürdüğünde, bu span yönetilmeyen bellek akışındaki tüm baytları içerir.
Döndürülenler
Hedefe okunan toplam bayt sayısı.
Şunlara uygulanır
Read(Byte[], Int32, Int32)
- Kaynak:
- UnmanagedMemoryStream.cs
- Kaynak:
- UnmanagedMemoryStream.cs
- Kaynak:
- UnmanagedMemoryStream.cs
Belirtilen bayt sayısını belirtilen diziye okur.
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
Parametreler
- buffer
- Byte[]
Bu yöntem döndürdüğünde, ve (offset
+ count
- 1) arasındaki offset
değerlerin geçerli kaynaktan okunan baytlarla değiştirdiği belirtilen bayt dizisini içerir. Bu parametre, başlatmadan iletilir.
- offset
- Int32
Geçerli akıştan okunan verileri depolamaya başlayabileceğiniz sıfır tabanlı bayt uzaklığı buffer
.
- count
- Int32
Geçerli akıştan okunacak bayt sayısı üst sınırı.
Döndürülenler
Arabelleğe okunan toplam bayt sayısı. Bu, şu anda kullanılabilir sayıda bayt yoksa istenen bayt sayısından az veya akışın sonuna ulaşıldıysa sıfır (0) olabilir.
Özel durumlar
Akış kapatıldı.
buffer
parametresi olarak null
ayarlanır.
offset
Parametresi sıfırdan küçük.
-veya-
count
Parametresi sıfırdan küçük.
Arabellek dizisinin uzunluğu eksi offset
parametresi parametresinden count
küçüktür.
Ö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
offset
parametresi, okumaya başlanacak parametrede array
(arabellek dizini) bayt uzaklığını, parametresi ise count
bu akıştan okunacak en fazla bayt sayısını verir. Döndürülen değer, okunan gerçek bayt sayısıdır veya akışın sonuna ulaşılırsa sıfırdır. Okuma işlemi başarılı olursa, akışın geçerli konumu okunan bayt sayısına göre gelişmiştir. Bir özel durum oluşursa akışın geçerli konumu değişmez.
Read yöntemi yalnızca akışın sonuna ulaştıktan sonra sıfır döndürür. Aksi takdirde, Read döndürmeden önce her zaman akıştan en az bir bayt okur. çağrısı Readüzerine akıştan kullanılabilir veri yoksa, yöntem en az bir bayt veri döndürülene kadar engeller. Bir uygulama, akışın sonuna ulaşılmasa bile istenenden daha az bayt döndürmek için ücretsizdir.