UnmanagedMemoryStream Konstruktory
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Inicializuje novou instanci UnmanagedMemoryStream třídy.
Přetížení
UnmanagedMemoryStream() |
Inicializuje novou instanci UnmanagedMemoryStream třídy. |
UnmanagedMemoryStream(Byte*, Int64) |
Inicializuje novou instanci třídy UnmanagedMemoryStream pomocí zadaného umístění a délky paměti. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Inicializuje novou instanci třídy UnmanagedMemoryStream v bezpečné vyrovnávací paměti se zadaným posunem a délkou. |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Inicializuje novou instanci třídy UnmanagedMemoryStream pomocí zadaného umístění, délky paměti, celkového množství paměti a hodnot přístupu k souborům. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Inicializuje novou instanci třídy UnmanagedMemoryStream v bezpečné vyrovnávací paměti se zadaným posunem, délkou a přístupem k souboru. |
UnmanagedMemoryStream()
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
Inicializuje novou instanci UnmanagedMemoryStream třídy.
protected:
UnmanagedMemoryStream();
protected UnmanagedMemoryStream ();
Protected Sub New ()
Výjimky
Uživatel nemá požadovaná oprávnění.
Platí pro
UnmanagedMemoryStream(Byte*, Int64)
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
Důležité
Toto rozhraní API neodpovídá specifikaci CLS.
Inicializuje novou instanci třídy UnmanagedMemoryStream pomocí zadaného umístění a délky paměti.
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
Parametry
- pointer
- Byte*
Ukazatel na nespravované umístění paměti.
- length
- Int64
Délka paměti, kterou chcete použít.
- Atributy
Výjimky
Uživatel nemá požadovaná oprávnění.
Hodnota pointer
je null
.
Hodnota length
je menší než nula.
-nebo-
length
je dostatečně velký, aby způsobil přetečení.
Příklady
Následující příklad kódu ukazuje, jak číst z a zapisovat do nespravované paměti pomocí UnmanagedMemoryStream třídy. Blok nespravované paměti je přidělen a delokován pomocí třídy Marshal.
// 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));
}
}
Poznámky
Tento konstruktor vytvoří novou instanci třídy UnmanagedMemoryStream a ve výchozím nastavení nastaví vlastnost CanWrite na false
a vlastnost CanRead na true
. Vlastnost Length je nastavena na hodnotu parametru length
a nelze ji změnit.
Platí pro
UnmanagedMemoryStream(SafeBuffer, Int64, Int64)
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
Inicializuje novou instanci třídy UnmanagedMemoryStream v bezpečné vyrovnávací paměti se zadaným posunem a délkou.
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)
Parametry
- buffer
- SafeBuffer
Vyrovnávací paměť, která bude obsahovat nespravovaný datový proud paměti.
- offset
- Int64
Umístění bajtu ve vyrovnávací paměti, ve které se má spustit nespravovaný datový proud paměti.
- length
- Int64
Délka nespravovaného datového proudu paměti.
Platí pro
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
Důležité
Toto rozhraní API neodpovídá specifikaci CLS.
Inicializuje novou instanci třídy UnmanagedMemoryStream pomocí zadaného umístění, délky paměti, celkového množství paměti a hodnot přístupu k souborům.
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
Parametry
- pointer
- Byte*
Ukazatel na nespravované umístění paměti.
- length
- Int64
Délka paměti, kterou chcete použít.
- capacity
- Int64
Celkové množství paměti přiřazené ke streamu
- access
- FileAccess
Jedna z FileAccess hodnot.
- Atributy
Výjimky
Uživatel nemá požadovaná oprávnění.
Hodnota pointer
je null
.
Hodnota length
je menší než nula.
-nebo-
Hodnota capacity
je menší než nula.
-nebo-
Hodnota length
je větší než hodnota capacity
.
Příklady
Následující příklad kódu ukazuje, jak číst z a zapisovat do nespravované paměti pomocí UnmanagedMemoryStream třídy. Blok nespravované paměti je přidělen a delokován pomocí třídy Marshal.
// 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();
}
}
Poznámky
Parametr length
definuje aktuální množství používané paměti. Při čtení nebo připojování dat ke streamu by se hodnota length
měla rovnat množství platných dat v datovém proudu, ze které se mají číst nebo zachovat. Při zápisu do datového proudu by tato hodnota měla být nula.
Parametr capacity
označuje množství celkové dostupné paměti. Tato hodnota může popsat oblast, která je delší než zadaná délka, nebo označit oblast, ke které lze připojit. Všechny pokusy o zápis nad rámec této hodnoty selžou.
Parametr access
nastaví vlastnosti CanReada CanWrite. Všimněte si, že zadání Write nezaručuje, že datový proud bude zapisovatelný. Parametry přístupu umožňují implementátoru vytvořit objekt, jehož implementace může odpovídat skutečnému datovému proudu, který je vystaven.
Platí pro
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
- Zdroj:
- UnmanagedMemoryStream.cs
Inicializuje novou instanci třídy UnmanagedMemoryStream v bezpečné vyrovnávací paměti se zadaným posunem, délkou a přístupem k souboru.
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)
Parametry
- buffer
- SafeBuffer
Vyrovnávací paměť, která bude obsahovat nespravovaný datový proud paměti.
- offset
- Int64
Umístění bajtu ve vyrovnávací paměti, ve které se má spustit nespravovaný datový proud paměti.
- length
- Int64
Délka nespravovaného datového proudu paměti.
- access
- FileAccess
Režim přístupu k souboru k nespravovanému datovému proudu paměti.