Sdílet prostřednictvím


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 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.

Platí pro