UnmanagedMemoryStream.Read Methode

Definitie

Overloads

Name Description
Read(Span<Byte>)

Leest alle bytes van deze niet-beheerde geheugenstroom in de opgegeven reeks bytes.

Read(Byte[], Int32, Int32)

Hiermee wordt het opgegeven aantal bytes in de opgegeven matrix gelezen.

Read(Span<Byte>)

Leest alle bytes van deze niet-beheerde geheugenstroom in de opgegeven reeks bytes.

public:
 override int Read(Span<System::Byte> destination);
public override int Read(Span<byte> destination);
override this.Read : Span<byte> -> int
Public Overrides Function Read (destination As Span(Of Byte)) As Integer

Parameters

destinationbuffer
Span<Byte>

Wanneer deze methode wordt geretourneerd, bevat deze periode alle bytes uit de niet-beheerde geheugenstroom.

Retouren

Het totale aantal bytes dat in het doel is gelezen.

Van toepassing op

Read(Byte[], Int32, Int32)

Hiermee wordt het opgegeven aantal bytes in de opgegeven matrix gelezen.

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

Parameters

buffer
Byte[]

Wanneer deze methode wordt geretourneerd, bevat de opgegeven bytematrix met de waarden tussen offset en (offset + count - 1) vervangen door de bytes die zijn gelezen uit de huidige bron. Deze parameter wordt niet-geïnitialiseerd doorgegeven.

offset
Int32

De byte-offset buffer op basis van nul waarin de gegevens worden opgeslagen die uit de huidige stroom worden gelezen.

count
Int32

Het maximum aantal bytes dat moet worden gelezen uit de huidige stream.

Retouren

Het totale aantal bytes dat in de buffer is gelezen. Dit kan kleiner zijn dan het aantal aangevraagde bytes als er momenteel niet veel bytes beschikbaar zijn, of nul (0) als het einde van de stream is bereikt.

Uitzonderingen

De stream is gesloten.

Het onderliggende geheugen biedt geen ondersteuning voor lezen.

– of –

De eigenschap CanRead is ingesteld op false.

De buffer parameter is ingesteld op null.

De offset parameter is kleiner dan nul.

– of –

De count parameter is kleiner dan nul.

De lengte van de buffermatrix min de offset parameter is kleiner dan de count parameter.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u kunt lezen van en schrijven naar onbeheerd geheugen met behulp van de UnmanagedMemoryStream klasse. Er wordt een blok niet-beheerde geheugen toegewezen en de toewijzing ongedaan gemaakt met behulp van de Marshal klasse.


// 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();
    }
}

Opmerkingen

De offset parameter geeft de offset van de byte in de array parameter (de bufferindex) waarop moet worden gelezen en de count parameter geeft het maximum aantal bytes dat uit deze stroom moet worden gelezen. De geretourneerde waarde is het werkelijke aantal bytes dat wordt gelezen of nul als het einde van de stream is bereikt. Als de leesbewerking is geslaagd, wordt de huidige positie van de stream geavanceerd met het aantal bytes gelezen. Als er een uitzondering optreedt, is de huidige positie van de stream ongewijzigd.

De Read methode retourneert alleen nul nadat het einde van de stream is bereikt. Read Anders leest u altijd ten minste één byte uit de stream voordat u terugkeert. Als er geen gegevens uit de stream beschikbaar zijn bij een aanroep naar Read, wordt de methode geblokkeerd totdat ten minste één byte aan gegevens kan worden geretourneerd. Een implementatie is gratis om minder bytes te retourneren dan aangevraagd, zelfs als het einde van de stream niet is bereikt.

Van toepassing op