UnmanagedMemoryStream Konstruktory

Definice

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.

Platí pro