共用方式為


UnmanagedMemoryStream 建構函式

定義

初始化 UnmanagedMemoryStream 類別的新實例。

多載

UnmanagedMemoryStream()

初始化 UnmanagedMemoryStream 類別的新實例。

UnmanagedMemoryStream(Byte*, Int64)

使用指定的位置和記憶體長度,初始化 UnmanagedMemoryStream 類別的新實例。

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

使用指定的位移和長度,初始化安全緩衝區中 UnmanagedMemoryStream 類別的新實例。

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

使用指定的位置、記憶體長度、記憶體總數和檔案存取值,初始化 UnmanagedMemoryStream 類別的新實例。

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

使用指定的位移、長度和檔案存取,初始化安全緩衝區中 UnmanagedMemoryStream 類別的新實例。

UnmanagedMemoryStream()

來源:
UnmanagedMemoryStream.cs
來源:
UnmanagedMemoryStream.cs
來源:
UnmanagedMemoryStream.cs

初始化 UnmanagedMemoryStream 類別的新實例。

protected:
 UnmanagedMemoryStream();
protected UnmanagedMemoryStream ();
Protected Sub New ()

例外狀況

用戶沒有必要的許可權。

適用於

UnmanagedMemoryStream(Byte*, Int64)

來源:
UnmanagedMemoryStream.cs
來源:
UnmanagedMemoryStream.cs
來源:
UnmanagedMemoryStream.cs

重要

此 API 不符合 CLS 規範。

使用指定的位置和記憶體長度,初始化 UnmanagedMemoryStream 類別的新實例。

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

參數

pointer
Byte*

Unmanaged 記憶體位置的指標。

length
Int64

要使用的記憶體長度。

屬性

例外狀況

用戶沒有必要的許可權。

pointer 值是 null

length 值小於零。

-或-

length 夠大,造成溢位。

範例

下列程式代碼範例示範如何使用 UnmanagedMemoryStream 類別讀取和寫入 Unmanaged 記憶體。 使用 Marshal 類別來配置和取消配置 Unmanaged 記憶體區塊。

// 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));
    }
}

備註

此建構函式會建立 UnmanagedMemoryStream 類別的新實例,且預設會將 CanWrite 屬性設定為 false,並將 CanRead 屬性設定為 trueLength 屬性會設定為 length 參數的值,而且無法變更。

適用於

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

來源:
UnmanagedMemoryStream.cs
來源:
UnmanagedMemoryStream.cs
來源:
UnmanagedMemoryStream.cs

使用指定的位移和長度,初始化安全緩衝區中 UnmanagedMemoryStream 類別的新實例。

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)

參數

buffer
SafeBuffer

要包含 Unmanaged 記憶體數據流的緩衝區。

offset
Int64

要啟動 Unmanaged 記憶體數據流之緩衝區中的位元組位置。

length
Int64

Unmanaged 記憶體數據流的長度。

適用於

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

來源:
UnmanagedMemoryStream.cs
來源:
UnmanagedMemoryStream.cs
來源:
UnmanagedMemoryStream.cs

重要

此 API 不符合 CLS 規範。

使用指定的位置、記憶體長度、記憶體總數和檔案存取值,初始化 UnmanagedMemoryStream 類別的新實例。

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

參數

pointer
Byte*

Unmanaged 記憶體位置的指標。

length
Int64

要使用的記憶體長度。

capacity
Int64

指派給數據流的記憶體總數。

access
FileAccess

其中一個 FileAccess 值。

屬性

例外狀況

用戶沒有必要的許可權。

pointer 值是 null

length 值小於零。

-或-

capacity 值小於零。

-或-

length 值大於 capacity 值。

範例

下列程式代碼範例示範如何使用 UnmanagedMemoryStream 類別讀取和寫入 Unmanaged 記憶體。 使用 Marshal 類別來配置和取消配置 Unmanaged 記憶體區塊。


// 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();
    }
}

備註

length 參數會定義目前使用的記憶體數量。 如果讀取或附加數據至數據流,length 值應該等於要讀取或保留之數據流中有效數據的數量。 如果寫入數據流,這個值應該是零。

capacity 參數表示可用的記憶體總數。 這個值可以描述長度超過指定長度的區域,或指出可以附加至的區域。 任何超過此值的寫入嘗試都會失敗。

access 參數會設定 CanReadCanWrite 屬性。 請注意,指定 Write 不保證數據流可寫入。 存取參數可讓實作者建立對象,其實作可以符合公開的實際數據流。

適用於

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

來源:
UnmanagedMemoryStream.cs
來源:
UnmanagedMemoryStream.cs
來源:
UnmanagedMemoryStream.cs

使用指定的位移、長度和檔案存取,初始化安全緩衝區中 UnmanagedMemoryStream 類別的新實例。

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)

參數

buffer
SafeBuffer

要包含 Unmanaged 記憶體數據流的緩衝區。

offset
Int64

要啟動 Unmanaged 記憶體數據流之緩衝區中的位元組位置。

length
Int64

Unmanaged 記憶體數據流的長度。

access
FileAccess

Unmanaged 記憶體數據流的檔案存取模式。

適用於