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
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
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.