UnmanagedMemoryStream Constructors
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.
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse.
Overloads
| Name | Description |
|---|---|
| UnmanagedMemoryStream() |
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse. |
| UnmanagedMemoryStream(Byte*, Int64) |
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse met behulp van de opgegeven locatie en geheugenlengte. |
| UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse in een veilige buffer met een opgegeven offset en lengte. |
| UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse met behulp van de opgegeven locatie, geheugenlengte, totale hoeveelheid geheugen en waarden voor bestandstoegang. |
| UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse in een veilige buffer met een opgegeven offset, lengte en bestandstoegang. |
UnmanagedMemoryStream()
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse.
protected:
UnmanagedMemoryStream();
protected UnmanagedMemoryStream();
Protected Sub New ()
Uitzonderingen
De gebruiker heeft niet de vereiste machtiging.
Van toepassing op
UnmanagedMemoryStream(Byte*, Int64)
Belangrijk
Deze API is niet CLS-conform.
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse met behulp van de opgegeven locatie en geheugenlengte.
public:
UnmanagedMemoryStream(System::Byte* pointer, long length);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public UnmanagedMemoryStream(byte* pointer, long length);
[System.CLSCompliant(false)]
public UnmanagedMemoryStream(byte* pointer, long length);
public UnmanagedMemoryStream(byte* pointer, long length);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 -> System.IO.UnmanagedMemoryStream
[<System.CLSCompliant(false)>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 -> System.IO.UnmanagedMemoryStream
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 -> System.IO.UnmanagedMemoryStream
Parameters
- pointer
- Byte*
Een aanwijzer naar een onbeheerde geheugenlocatie.
- length
- Int64
De lengte van het te gebruiken geheugen.
- Kenmerken
Uitzonderingen
De gebruiker heeft niet de vereiste machtiging.
De pointer waarde is null.
De length waarde is kleiner dan nul.
– of –
De length is groot genoeg om een overloop te veroorzaken.
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.Runtime.InteropServices;
using System.Text;
unsafe class Program
{
static void Main()
{
// Create some data to write.
byte[] text = UnicodeEncoding.Unicode.GetBytes("Data to write.");
// Allocate a block of unmanaged memory.
IntPtr memIntPtr = Marshal.AllocHGlobal(text.Length);
// Get a byte pointer from the unmanaged memory block.
byte* memBytePtr = (byte*)memIntPtr.ToPointer();
UnmanagedMemoryStream writeStream =
new UnmanagedMemoryStream(
memBytePtr, text.Length, text.Length, FileAccess.Write);
// Write the data.
WriteToStream(writeStream, text);
// Close the stream.
writeStream.Close();
// Create another UnmanagedMemoryStream for reading.
UnmanagedMemoryStream readStream =
new UnmanagedMemoryStream(memBytePtr, text.Length);
// Display the contents of the stream to the console.
PrintStream(readStream);
// Close the reading stream.
readStream.Close();
// Free up the unmanaged memory.
Marshal.FreeHGlobal(memIntPtr);
}
public static void WriteToStream(UnmanagedMemoryStream writeStream, byte[] text)
{
// Verify that the stream is writable:
// By default, UnmanagedMemoryStream objects do not have write access,
// write access must be set explicitly.
if (writeStream.CanWrite)
{
// Write the data, byte by byte
for (int i = 0; i < writeStream.Length; i++)
{
writeStream.WriteByte(text[i]);
}
}
}
public static void PrintStream(UnmanagedMemoryStream readStream)
{
byte[] text = new byte[readStream.Length];
// Verify that the stream is writable:
// By default, UnmanagedMemoryStream objects do not have write access,
// write access must be set explicitly.
if (readStream.CanRead)
{
// Write the data, byte by byte
for (int i = 0; i < readStream.Length; i++)
{
text[i] = (byte)readStream.ReadByte();
}
}
Console.WriteLine(UnicodeEncoding.Unicode.GetString(text));
}
}
Opmerkingen
Deze constructor maakt een nieuw exemplaar van de UnmanagedMemoryStream klasse en stelt standaard de CanWrite eigenschap false in op en de CanRead eigenschap op true. De Length eigenschap is ingesteld op de waarde van de length parameter en kan niet worden gewijzigd.
Van toepassing op
UnmanagedMemoryStream(SafeBuffer, Int64, Int64)
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse in een veilige buffer met een opgegeven offset en lengte.
public:
UnmanagedMemoryStream(System::Runtime::InteropServices::SafeBuffer ^ buffer, long offset, long length);
public UnmanagedMemoryStream(System.Runtime.InteropServices.SafeBuffer buffer, long offset, long length);
new System.IO.UnmanagedMemoryStream : System.Runtime.InteropServices.SafeBuffer * int64 * int64 -> System.IO.UnmanagedMemoryStream
Public Sub New (buffer As SafeBuffer, offset As Long, length As Long)
Parameters
- buffer
- SafeBuffer
De buffer die de niet-beheerde geheugenstroom bevat.
- offset
- Int64
De bytepositie in de buffer waarop de onbeheerde geheugenstroom moet worden gestart.
- length
- Int64
De lengte van de niet-beheerde geheugenstroom.
Van toepassing op
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)
Belangrijk
Deze API is niet CLS-conform.
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse met behulp van de opgegeven locatie, geheugenlengte, totale hoeveelheid geheugen en waarden voor bestandstoegang.
public:
UnmanagedMemoryStream(System::Byte* pointer, long length, long capacity, System::IO::FileAccess access);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public UnmanagedMemoryStream(byte* pointer, long length, long capacity, System.IO.FileAccess access);
[System.CLSCompliant(false)]
public UnmanagedMemoryStream(byte* pointer, long length, long capacity, System.IO.FileAccess access);
public UnmanagedMemoryStream(byte* pointer, long length, long capacity, System.IO.FileAccess access);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
[<System.CLSCompliant(false)>]
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
new System.IO.UnmanagedMemoryStream : nativeptr<byte> * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
Parameters
- pointer
- Byte*
Een aanwijzer naar een onbeheerde geheugenlocatie.
- length
- Int64
De lengte van het te gebruiken geheugen.
- capacity
- Int64
De totale hoeveelheid geheugen die aan de stream is toegewezen.
- access
- FileAccess
Een van de FileAccess waarden.
- Kenmerken
Uitzonderingen
De gebruiker heeft niet de vereiste machtiging.
De pointer waarde is null.
De length waarde is kleiner dan nul.
– of –
De capacity waarde is kleiner dan nul.
– of –
De length waarde is groter dan de capacity waarde.
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 length parameter definieert de huidige hoeveelheid geheugen die in gebruik is. Als u gegevens leest of toevoegt aan de stroom, moet de length waarde gelijk zijn aan de hoeveelheid geldige gegevens in de stroom die moet worden gelezen of behouden. Als u naar de stream schrijft, moet deze waarde nul zijn.
De capacity parameter geeft de hoeveelheid beschikbaar geheugen aan. Deze waarde kan een regio beschrijven die langer is dan de opgegeven lengte of een regio aangeeft waaraan kan worden toegevoegd. Pogingen om buiten deze waarde te schrijven, mislukken.
De access parameter stelt de CanReaden CanWrite eigenschappen in. Houd er rekening mee Write dat opgeven niet garandeert dat de stream beschrijfbaar is. Met de toegangsparameters kan de implementeerfunctie een object maken waarvan de implementatie overeenkomt met de werkelijke stroom die wordt weergegeven.
Van toepassing op
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)
Initialiseert een nieuw exemplaar van de UnmanagedMemoryStream klasse in een veilige buffer met een opgegeven offset, lengte en bestandstoegang.
public:
UnmanagedMemoryStream(System::Runtime::InteropServices::SafeBuffer ^ buffer, long offset, long length, System::IO::FileAccess access);
public UnmanagedMemoryStream(System.Runtime.InteropServices.SafeBuffer buffer, long offset, long length, System.IO.FileAccess access);
new System.IO.UnmanagedMemoryStream : System.Runtime.InteropServices.SafeBuffer * int64 * int64 * System.IO.FileAccess -> System.IO.UnmanagedMemoryStream
Public Sub New (buffer As SafeBuffer, offset As Long, length As Long, access As FileAccess)
Parameters
- buffer
- SafeBuffer
De buffer die de niet-beheerde geheugenstroom bevat.
- offset
- Int64
De bytepositie in de buffer waarop de onbeheerde geheugenstroom moet worden gestart.
- length
- Int64
De lengte van de niet-beheerde geheugenstroom.
- access
- FileAccess
De modus voor bestandstoegang tot de niet-beheerde geheugenstroom.