Sdílet prostřednictvím


UnmanagedMemoryStream.Read Metoda

Definice

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

destinationbuffer
Span<Byte>

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.

Základní paměť nepodporuje čtení.

-nebo-

Vlastnost CanRead je nastavena na hodnotu false.

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.

Platí pro