UnmanagedMemoryStream Oluşturucular
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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 true
olarak 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.