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 sınıfının yeni bir örneğini UnmanagedMemoryStream başlatır.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

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

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

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

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

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

UnmanagedMemoryStream()

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)

Önemli

Bu API, CLS uyumlu değildir.

Belirtilen konumu ve bellek uzunluğunu kullanarak sınıfının yeni bir örneğini UnmanagedMemoryStream 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 olur.

Değer length sıfırdan küçüktür.

-veya- length taşmaya neden olacak kadar büyüktür.

Örnekler

Aşağıdaki kod örneği, sınıfını kullanarak yönetilmeyen bellekten okuma ve yazma işlemini UnmanagedMemoryStream gösterir. Yönetilmeyen bellek bloğu ayrılır ve sınıfı kullanılarak Marshal ayrılmıştı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 sınıfının yeni bir örneğini UnmanagedMemoryStream oluşturur ve varsayılan olarak özelliğini ve CanRead özelliğini false olarak trueayarlarCanWrite. Length özelliği parametresinin length değerine ayarlanır ve değiştirilemez.

Şunlara uygulanır

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Belirtilen uzaklık ve uzunluk ile güvenli bir arabellekte sınıfının yeni bir örneğini UnmanagedMemoryStream 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çeren 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)

Önemli

Bu API, CLS uyumlu değildir.

Belirtilen konumu, bellek uzunluğunu, toplam bellek miktarını ve dosya erişim değerlerini kullanarak sınıfın yeni bir örneğini UnmanagedMemoryStream 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

Değerlerden FileAccess biri.

Öznitelikler

Özel durumlar

Kullanıcının gerekli izni yok.

pointer değeri null olur.

Değer length sıfırdan küçüktür.

-veya- Değer capacity sıfırdan küçüktür.

-veya- Değer length değerinden capacity büyük.

Örnekler

Aşağıdaki kod örneği, sınıfını kullanarak yönetilmeyen bellekten okuma ve yazma işlemini UnmanagedMemoryStream gösterir. Yönetilmeyen bellek bloğu ayrılır ve sınıfı kullanılarak Marshal ayrılmıştı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. Verileri okur veya akışa eklerseniz, length değer akıştaki okunacak veya korunacak 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şimleri başarısız olur.

access parametresi , ve CanWrite özelliklerini ayarlarCanRead. Belirtilmesi Write , 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)

Belirtilen uzaklık, uzunluk ve dosya erişimi ile güvenli bir arabellekte sınıfının yeni bir örneğini UnmanagedMemoryStream 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çeren 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