Freigeben über


UnmanagedMemoryStream.Read Methode

Definition

Überlädt

Read(Span<Byte>)

Liest alle Bytes dieses nicht verwalteten Arbeitsspeicherstreams in die angegebene Spanne von Bytes.

Read(Byte[], Int32, Int32)

Liest die angegebene Anzahl von Bytes in das angegebene Array.

Read(Span<Byte>)

Quelle:
UnmanagedMemoryStream.cs
Quelle:
UnmanagedMemoryStream.cs
Quelle:
UnmanagedMemoryStream.cs

Liest alle Bytes dieses nicht verwalteten Arbeitsspeicherstreams in die angegebene Spanne von Bytes.

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

Parameter

destinationbuffer
Span<Byte>

Wenn diese Methode zurückkehrt, enthält diese Spanne alle Bytes aus dem nicht verwalteten Arbeitsspeicherstream.

Gibt zurück

Die Gesamtzahl der in das Ziel gelesenen Bytes.

Gilt für:

Read(Byte[], Int32, Int32)

Quelle:
UnmanagedMemoryStream.cs
Quelle:
UnmanagedMemoryStream.cs
Quelle:
UnmanagedMemoryStream.cs

Liest die angegebene Anzahl von Bytes in das angegebene Array.

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

Parameter

buffer
Byte[]

Enthält nach dem Beenden dieser Methode das angegebene Bytearray mit den Werten zwischen offset und (offset + count - 1) die durch die aus der aktuellen Quelle gelesenen Bytes ersetzt wurden. Dieser Parameter wird nicht initialisiert übergeben.

offset
Int32

Der nullbasierte Byteoffset im buffer, ab dem die aus dem aktuellen Stream gelesenen Daten gespeichert werden.

count
Int32

Die maximale Anzahl an Bytes, die aus dem aktuellen Stream gelesen werden sollen.

Gibt zurück

Die Gesamtanzahl der in den Puffer gelesenen Bytes. Dies kann weniger als die Anzahl der angeforderten Bytes sein, wenn diese Anzahl an Bytes derzeit nicht verfügbar ist, oder 0, wenn das Ende des Streams erreicht ist.

Ausnahmen

Der Stream ist geschlossen.

Der zugrunde liegende Speicher unterstützt keine Lesevorgänge.

- oder -

Die CanRead-Eigenschaft ist auf false festgelegt.

Der buffer-Parameter ist auf null festgelegt.

Die offset-Parameter ist kleiner als 0 (null).

- oder -

Die count-Parameter ist kleiner als 0 (null).

Die Länge des Pufferarrays minus dem offset-Parameter ist kleiner als der count-Parameter.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie Sie mithilfe der -Klasse aus nicht verwaltetem Arbeitsspeicher lesen und in diesen UnmanagedMemoryStream schreiben. Ein Block des nicht verwalteten Arbeitsspeichers wird mithilfe der Marshal -Klasse zugewiesen und aufgehoben.


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

Hinweise

Der offset Parameter gibt den Offset des Byte im array Parameter (pufferindex) an, bei dem mit dem Lesen begonnen werden soll, und der count Parameter gibt die maximale Anzahl von Bytes an, die aus diesem Stream gelesen werden sollen. Der zurückgegebene Wert ist die tatsächliche Anzahl gelesener Bytes oder null, wenn das Ende des Datenstroms erreicht ist. Wenn der Lesevorgang erfolgreich ist, wird die aktuelle Position des Datenstroms um die Anzahl der gelesenen Bytes erweitert. Wenn eine Ausnahme auftritt, bleibt die aktuelle Position des Datenstroms unverändert.

Die Read -Methode gibt nur null zurück, nachdem das Ende des Datenstroms erreicht wurde. Read Andernfalls liest vor der Rückgabe immer mindestens ein Byte aus dem Stream. Wenn bei einem Aufruf Readvon keine Daten aus dem Stream verfügbar sind, wird die -Methode blockiert, bis mindestens ein Byte daten zurückgegeben werden kann. Eine Implementierung kann auch dann weniger Bytes zurückgeben als angefordert, wenn das Ende des Datenstroms nicht erreicht wurde.

Gilt für: