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 UnmanagedMemoryStream třídy pomocí zadaného umístění a délky paměti. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Inicializuje novou instanci UnmanagedMemoryStream třídy v bezpečné vyrovnávací paměti se zadaným posunem a délkou. |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Inicializuje novou instanci UnmanagedMemoryStream třídy pomocí zadaného umístění, délky paměti, celkové velikosti paměti a hodnot přístupu k souborům. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Inicializuje novou instanci UnmanagedMemoryStream třídy v bezpečné vyrovnávací paměti se zadaným posunem, délkou a přístupem k souborům. |
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 UnmanagedMemoryStream třídy 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 umístění nespravované paměti.
- length
- Int64
Délka paměti, která se má použít.
- Atributy
Výjimky
Uživatel nemá požadovaná oprávnění.
Hodnota pointer
je null
.
Hodnota length
je menší než nula.
-nebo-
Je length
dostatečně velká, aby způsobila 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 uvolněn pomocí Marshal třídy .
// 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 UnmanagedMemoryStream třídy a ve výchozím nastavení nastaví CanWrite vlastnost na false
a CanRead vlastnost 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 UnmanagedMemoryStream třídy 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á má obsahovat nespravovaný datový proud paměti.
- offset
- Int64
Pozice 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 UnmanagedMemoryStream třídy pomocí zadaného umístění, délky paměti, celkové velikosti 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 umístění nespravované paměti.
- length
- Int64
Délka paměti, která se má použít.
- capacity
- Int64
Celkové množství paměti přiřazené k datovému proudu.
- 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 uvolněn pomocí Marshal třídy .
// 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ě používané množství paměti. Při čtení nebo připojení dat k datovému proudu length
by hodnota měla být rovna množství platných dat v datovém proudu, které se mají číst nebo zachovat. Při zápisu do datového proudu by tato hodnota měla být nula.
Parametr capacity
určuje celkovou dostupnou paměť. Tato hodnota může popisovat oblast, která je delší než zadaná délka, nebo označuje oblast, ke které se dá připojit. Jakýkoli pokus o zápis nad tuto hodnotu se nezdaří.
Parametr access
nastaví CanReadvlastnosti , a CanWrite . Upozorňujeme Write , že zadání 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 UnmanagedMemoryStream třídy v bezpečné vyrovnávací paměti se zadaným posunem, délkou a přístupem k souborům.
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á má obsahovat nespravovaný datový proud paměti.
- offset
- Int64
Pozice 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 souborům k nespravovanému datovému proudu paměti.