UnmanagedMemoryStream.Read Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Přetížení
Read(Span<Byte>) |
Načte všechny bajty tohoto nespravovaného datového proudu paměti do zadaného rozsahu bajtů. |
Read(Byte[], Int32, Int32) |
Načte zadaný počet bajtů do zadaného pole. |
Read(Span<Byte>)
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
Načte všechny bajty tohoto nespravovaného datového proudu paměti do zadaného rozsahu bajtů.
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
Když tato metoda vrátí, tento rozsah obsahuje všechny bajty z nespravovaného datového proudu paměti.
Návraty
Celkový počet bajtů přečtených do cíle.
Platí pro
Read(Byte[], Int32, Int32)
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
Načte zadaný počet bajtů do zadaného pole.
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[]
Když tato metoda vrátí, obsahuje zadané pole bajtů s hodnotami mezi offset
a (offset
+ count
- 1) nahrazené bajty načtenými z aktuálního zdroje. Tento parametr se předává neinicializovaný.
- offset
- Int32
Nulový odsazení bajtů, při buffer
kterém se mají začít ukládat data načtená z aktuálního datového proudu.
- count
- Int32
Maximální počet bajtů, které se mají načíst z aktuálního datového proudu.
Návraty
Celkový počet bajtů načtených do vyrovnávací paměti. To může být menší než počet požadovaných bajtů, pokud tento počet bajtů není aktuálně k dispozici, nebo nula (0), pokud bylo dosaženo konce datového proudu.
Výjimky
Datový proud se zavře.
Parametr buffer
je nastavený na null
.
Parametr offset
je menší než nula.
-nebo-
Parametr count
je menší než nula.
Délka pole vyrovnávací paměti minus offset
parametr je menší než count
parametr.
Příklady
Následující příklad kódu ukazuje, jak číst z a zapisovat do nespravované paměti pomocí UnmanagedMemoryStream třídy. Blok nespravované paměti se přidělí a zruší přidělení pomocí Marshal třídy.
// 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();
}
}
Poznámky
Parametr offset
poskytuje posun bajtu v parametru array
(index vyrovnávací paměti), při kterém se má začít číst, a count
parametr poskytuje maximální počet bajtů, které se mají z tohoto datového proudu číst. Vrácená hodnota je skutečný počet přečtených bajtů, nebo nula, pokud je dosaženo konce datového proudu. Pokud je operace čtení úspěšná, aktuální pozice datového proudu je rozšířena o počet přečtených bajtů. Pokud dojde k výjimce, aktuální pozice datového proudu se nezmění.
Metoda Read vrátí nulu až po dosažení konce datového proudu. V opačném Read případě vždy před vrácením přečte alespoň jeden bajt z datového proudu. Pokud nejsou z datového proudu při volání Readk dispozici žádná data , metoda se zablokuje, dokud nebude možné vrátit alespoň jeden bajt dat. Implementace může bezplatně vracet méně bajtů, než je požadováno, i když nebylo dosaženo konce datového proudu.