UnmanagedMemoryStream.Read Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Överlagringar
| Name | Description |
|---|---|
| Read(Span<Byte>) |
Läser alla byte i den här ohanterade minnesströmmen till det angivna byteintervallet. |
| Read(Byte[], Int32, Int32) |
Läser det angivna antalet byte i den angivna matrisen. |
Read(Span<Byte>)
Läser alla byte i den här ohanterade minnesströmmen till det angivna byteintervallet.
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
Parametrar
När den här metoden returneras innehåller det här intervallet alla byte från den ohanterade minnesströmmen.
Returer
Det totala antalet byte som lästs in i målet.
Gäller för
Read(Byte[], Int32, Int32)
Läser det angivna antalet byte i den angivna matrisen.
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
Parametrar
- buffer
- Byte[]
När den här metoden returnerar innehåller den angivna bytematrisen med värdena mellan offset och (offset + count - 1) ersatta av byteen som lästs från den aktuella källan. Den här parametern skickas oinitierad.
- offset
- Int32
Den nollbaserade byteförskjutningen buffer där du kan börja lagra data som lästs från den aktuella strömmen.
- count
- Int32
Det maximala antalet byte som ska läsas från den aktuella strömmen.
Returer
Det totala antalet byte som lästs in i bufferten. Detta kan vara mindre än antalet begärda byte om så många byte inte är tillgängliga för närvarande, eller noll (0) om strömmens slut har nåtts.
Undantag
Strömmen är stängd.
Parametern buffer är inställd på null.
Parametern offset är mindre än noll.
-eller-
Parametern count är mindre än noll.
Längden på buffertmatrisen minus parametern offset är mindre än parametern count .
Exempel
Följande kodexempel visar hur du läser från och skriver till ohanterat minne med hjälp av UnmanagedMemoryStream klassen. Ett block med ohanterat minne allokeras och avallokeras med hjälp av Marshal klassen.
// 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();
}
}
Kommentarer
Parametern offset ger förskjutningen av byte i parametern array (buffertindexet) där läsningen ska börja, och parametern count ger det maximala antalet byte som ska läsas från den här strömmen. Det returnerade värdet är det faktiska antalet lästa byte eller noll om strömmens slut nås. Om läsåtgärden lyckas avanceras strömmens aktuella position med antalet lästa byte. Om ett undantag inträffar ändras strömmens aktuella position.
Metoden Read returnerar endast noll efter att ha nått slutet av dataströmmen. Annars Read läser alltid minst en byte från strömmen innan den returneras. Om inga data är tillgängliga från strömmen vid ett anrop till Readblockeras metoden tills minst en byte data kan returneras. En implementering kan returnera färre byte än vad som begärts även om dataströmmens slut inte har nåtts.