Aracılığıyla paylaş


UnmanagedMemoryStream Oluşturucular

Tanım

UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

Aşırı Yüklemeler

UnmanagedMemoryStream()

UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

UnmanagedMemoryStream(Byte*, Int64)

Belirtilen konumu ve bellek uzunluğunu kullanarak UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Belirtilen uzaklık ve uzunluk ile güvenli bir arabellekte UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

Belirtilen konumu, bellek uzunluğunu, toplam bellek miktarını ve dosya erişim değerlerini kullanarak UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

Belirtilen uzaklık, uzunluk ve dosya erişimine sahip güvenli bir arabellekte UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

UnmanagedMemoryStream()

Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs

UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

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

Özel durumlar

Kullanıcının gerekli izni yok.

Şunlara uygulanır

UnmanagedMemoryStream(Byte*, Int64)

Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs

Önemli

Bu API, CLS uyumlu değildir.

Belirtilen konumu ve bellek uzunluğunu kullanarak UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

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

Parametreler

pointer
Byte*

Yönetilmeyen bellek konumuna yönelik bir işaretçi.

length
Int64

Kullanılacak belleğin uzunluğu.

Öznitelikler

Özel durumlar

Kullanıcının gerekli izni yok.

pointer değeri null.

length değeri sıfırdan küçüktür.

-veya-

length taşmaya neden olacak kadar büyük.

Örnekler

Aşağıdaki kod örneğinde, UnmanagedMemoryStream sınıfı kullanılarak yönetilmeyen bellekten okuma ve yazma işlemleri gösterilmektedir. Yönetilmeyen bellek bloğu, Marshal sınıfı kullanılarak ayrılır ve kaldırılır.

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

Açıklamalar

Bu oluşturucu, UnmanagedMemoryStream sınıfının yeni bir örneğini oluşturur ve varsayılan olarak CanWrite özelliğini false ve CanRead özelliğini trueolarak ayarlar. Length özelliği length parametresinin değerine ayarlanır ve değiştirilemez.

Şunlara uygulanır

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs

Belirtilen uzaklık ve uzunluk ile güvenli bir arabellekte UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

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)

Parametreler

buffer
SafeBuffer

Yönetilmeyen bellek akışını içerecek arabellek.

offset
Int64

Yönetilmeyen bellek akışının başlatıldığı arabellekteki bayt konumu.

length
Int64

Yönetilmeyen bellek akışının uzunluğu.

Şunlara uygulanır

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs

Önemli

Bu API, CLS uyumlu değildir.

Belirtilen konumu, bellek uzunluğunu, toplam bellek miktarını ve dosya erişim değerlerini kullanarak UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

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

Parametreler

pointer
Byte*

Yönetilmeyen bellek konumuna yönelik bir işaretçi.

length
Int64

Kullanılacak belleğin uzunluğu.

capacity
Int64

Akışa atanan toplam bellek miktarı.

access
FileAccess

FileAccess değerlerinden biri.

Öznitelikler

Özel durumlar

Kullanıcının gerekli izni yok.

pointer değeri null.

length değeri sıfırdan küçüktür.

-veya-

capacity değeri sıfırdan küçüktür.

-veya-

length değeri capacity değerinden büyüktür.

Örnekler

Aşağıdaki kod örneğinde, UnmanagedMemoryStream sınıfı kullanılarak yönetilmeyen bellekten okuma ve yazma işlemleri gösterilmektedir. Yönetilmeyen bellek bloğu, Marshal sınıfı kullanılarak ayrılır ve kaldırılır.


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

Açıklamalar

length parametresi, kullanılmakta olan geçerli bellek miktarını tanımlar. Akışa veri okunuyor veya ekleniyorsa, length değeri, okunacak veya korunacak akıştaki geçerli veri miktarına eşit olmalıdır. Akışa yazıyorsanız, bu değer sıfır olmalıdır.

capacity parametresi kullanılabilir toplam bellek miktarını gösterir. Bu değer, belirtilen uzunluktan daha uzun bir bölgeyi açıklayabilir veya eklenebilen bir bölgeyi gösterebilir. Bu değerin ötesinde yazma girişimi başarısız olur.

access parametresi, CanReadve CanWrite özelliklerini ayarlar. Write belirtilmesi, akışın yazılabilir olacağını garanti etmez. Erişim parametreleri, uygulayıcının uygulaması kullanıma sunulan gerçek akışla eşleşebilecek bir nesne oluşturmasına olanak sağlar.

Şunlara uygulanır

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs
Kaynak:
UnmanagedMemoryStream.cs

Belirtilen uzaklık, uzunluk ve dosya erişimine sahip güvenli bir arabellekte UnmanagedMemoryStream sınıfının yeni bir örneğini başlatır.

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)

Parametreler

buffer
SafeBuffer

Yönetilmeyen bellek akışını içerecek arabellek.

offset
Int64

Yönetilmeyen bellek akışının başlatıldığı arabellekteki bayt konumu.

length
Int64

Yönetilmeyen bellek akışının uzunluğu.

access
FileAccess

Yönetilmeyen bellek akışına dosya erişimi modu.

Şunlara uygulanır