UnmanagedMemoryStream.Read Metoda

Definicja

Przeciążenia

Nazwa Opis
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
Ź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> buffer);
public:
 override int Read(Span<System::Byte> destination);
public override int Read(Span<byte> buffer);
public override int Read(Span<byte> destination);
override this.Read : Span<byte> -> int
override this.Read : Span<byte> -> int
Public Overrides Function Read (buffer As Span(Of Byte)) As Integer
Public Overrides Function Read (destination As Span(Of Byte)) As Integer

Parametry

destinationbuffer
Span<Byte>

Gdy ta metoda zwróci, 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
Ź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) zamienione przez bajty odczytane z bieżącego źródła. Ten parametr jest przekazywany niezainicjowany.

offset
Int32

Przesunięcie bajtu 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ć mniej niż liczba bajtów żądanych, jeśli liczba bajtów nie jest obecnie dostępna lub zero (0), jeśli osiągnięto koniec strumienia.

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 o offset parametr jest mniejsza niż count parametr .

Przykłady

W poniższym przykładzie kodu pokazano, jak odczytywać i zapisywać w niezarządzanej pamięci przy użyciu UnmanagedMemoryStream klasy . Blok niezarządzanej pamięci jest przydzielany i cosadowany 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żące położenie strumienia pozostaje niezmienione.

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 nie są dostępne ze strumienia po wywołaniu Readmetody , metoda zablokuje co najmniej jeden bajt danych. Implementacja jest bezpłatna, aby zwracać mniej bajtów niż żądano, nawet jeśli koniec strumienia nie został osiągnięty.

Dotyczy