UnmanagedMemoryStream.Read Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Überlädt
| Name | Beschreibung |
|---|---|
| Read(Span<Byte>) |
Liest alle Bytes dieses nicht verwalteten Speicherdatenstroms in die angegebene Bytespanne. |
| 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
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
Liest alle Bytes dieses nicht verwalteten Speicherdatenstroms in die angegebene Bytespanne.
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
Parameter
Wenn diese Methode zurückgegeben wird, enthält diese Spanne alle Bytes aus dem nicht verwalteten Speicherdatenstrom.
Gibt zurück
Die Gesamtanzahl der Bytes, die in das Ziel gelesen werden.
Gilt für:
Read(Byte[], Int32, Int32)
- Quelle:
- UnmanagedMemoryStream.cs
- Quelle:
- UnmanagedMemoryStream.cs
- 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[]
Wenn diese Methode zurückgegeben wird, enthält das angegebene Bytearray mit den Werten zwischen offset und (offset + count - 1), die durch die aus der aktuellen Quelle gelesenen Bytes ersetzt werden. Dieser Parameter wird nicht initialisiert übergeben.
- offset
- Int32
Der nullbasierte Byte-Offset, in buffer dem die Daten gespeichert werden sollen, die aus dem aktuellen Datenstrom gelesen werden.
- count
- Int32
Die maximale Anzahl von Bytes, die aus dem aktuellen Datenstrom gelesen werden sollen.
Gibt zurück
Die Gesamtanzahl der in den Puffer gelesenen Bytes. Dies kann kleiner als die Anzahl der angeforderten Bytes sein, wenn viele Bytes derzeit nicht verfügbar sind, oder Null (0), wenn das Ende des Datenstroms erreicht wurde.
Ausnahmen
Der Datenstrom wird geschlossen.
Der zugrunde liegende Arbeitsspeicher unterstützt das Lesen nicht.
-oder-
Die CanRead-Eigenschaft ist auf false festgelegt.
Der buffer-Parameter ist auf null festgelegt.
Der offset Parameter ist kleiner als Null.
-oder-
Der count Parameter ist kleiner als Null.
Die Länge des Pufferarrays abzüglich des offset Parameters ist kleiner als der count Parameter.
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie Sie mithilfe der UnmanagedMemoryStream Klasse in nicht verwalteten Arbeitsspeicher lesen und schreiben. Ein Block des nicht verwalteten Speichers 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 Bytes im array Parameter (dem Pufferindex) an, an dem mit dem Lesen begonnen werden soll, und der count Parameter gibt die maximale Anzahl von Bytes an, die aus diesem Datenstrom gelesen werden sollen. Der zurückgegebene Wert ist die tatsächliche Anzahl der gelesenen 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, ist die aktuelle Position des Datenstroms unverändert.
Die Read Methode gibt null erst nach Erreichen des Endes des Datenstroms zurück. Read Andernfalls liest vor der Rückgabe immer mindestens ein Byte aus dem Datenstrom vor. Wenn beim Aufruf Readdes Datenstroms keine Daten verfügbar sind, wird die Methode blockiert, bis mindestens ein Byte von Daten zurückgegeben werden kann. Eine Implementierung kann weniger Bytes zurückgeben als angefordert, auch wenn das Ende des Datenstroms nicht erreicht wurde.