UnmanagedMemoryStream.Read Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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
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.