UnmanagedMemoryStream.Read Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Przeciążenia
Read(Span<Byte>) |
Odczytuje wszystkie bajty tego niezarządzanego strumienia pamięci do określonego zakresu bajtów. |
Read(Byte[], Int32, Int32) |
Odczytuje określoną liczbę bajtów do określonej tablicy. |
Read(Span<Byte>)
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
Odczytuje wszystkie bajty tego niezarządzanego strumienia pamięci do określonego zakresu bajtów.
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
Parametry
Gdy ta metoda zwróci wartość , ten zakres zawiera wszystkie bajty ze strumienia pamięci niezarządzanej.
Zwraca
Całkowita liczba bajtów odczytanych do miejsca docelowego.
Dotyczy
Read(Byte[], Int32, Int32)
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
- Źródło:
- UnmanagedMemoryStream.cs
Odczytuje określoną liczbę bajtów do określonej tablicy.
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
Parametry
- buffer
- Byte[]
Gdy ta metoda zwraca wartość , zawiera określoną tablicę bajtów z wartościami między offset
i (offset
+ count
- 1) zastąpionymi bajtami odczytanymi z bieżącego źródła. Ten parametr jest przekazywany jako niezainicjowany.
- offset
- Int32
Przesunięcie bajtów na podstawie zera, w buffer
którym należy rozpocząć przechowywanie danych odczytanych z bieżącego strumienia.
- count
- Int32
Maksymalna liczba bajtów do odczytu z bieżącego strumienia.
Zwraca
Całkowita liczba bajtów odczytanych do buforu. Może to być mniejsza niż liczba bajtów żądanych, jeśli liczba bajtów nie jest obecnie dostępna, lub zero (0), jeśli koniec strumienia został osiągnięty.
Wyjątki
Strumień jest zamknięty.
Parametr buffer
jest ustawiony na null
wartość .
Parametr offset
jest mniejszy niż zero.
-lub-
Parametr count
jest mniejszy niż zero.
Długość tablicy buforu pomniejszona offset
o parametr jest mniejsza niż count
parametr .
Przykłady
W poniższym przykładzie kodu pokazano, jak odczytywać dane z niezarządzanej pamięci i zapisywać je przy UnmanagedMemoryStream użyciu klasy . Blok niezarządzanej pamięci jest przydzielany i delokowany przy użyciu Marshal klasy .
// 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();
}
}
Uwagi
Parametr offset
daje przesunięcie bajtu w parametrze array
(indeks buforu), w którym można rozpocząć odczytywanie, a count
parametr daje maksymalną liczbę bajtów do odczytu z tego strumienia. Zwracana wartość to rzeczywista liczba odczytanych bajtów lub zero, jeśli osiągnięto koniec strumienia. Jeśli operacja odczytu zakończy się pomyślnie, bieżąca pozycja strumienia jest zaawansowana przez liczbę odczytanych bajtów. Jeśli wystąpi wyjątek, bieżąca pozycja strumienia pozostaje niezmieniona.
Metoda Read zwraca zero dopiero po osiągnięciu końca strumienia. Read W przeciwnym razie zawsze odczytuje co najmniej jeden bajt ze strumienia przed zwróceniem. Jeśli żadne dane ze strumienia nie są dostępne po wywołaniu metody Read, metoda będzie blokować do momentu zwrócenia co najmniej jednego bajtu danych. Implementacja może zwracać mniej bajtów niż zażądano, nawet jeśli koniec strumienia nie został osiągnięty.