Udostępnij za pośrednictwem


UnmanagedMemoryStream.Read Metoda

Definicja

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

destinationbuffer
Span<Byte>

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.

Pamięć bazowa nie obsługuje odczytu.

-lub-

Właściwość CanRead ma ustawioną wartość false.

Parametr buffer jest ustawiony na nullwartość .

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.

Dotyczy