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 sınıfın UnmanagedMemoryStream yeni bir örneğini başlatır. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Sınıfın UnmanagedMemoryStream yeni bir örneğini belirtilen uzaklık ve uzunluğa sahip güvenli bir arabellekte 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) |
Sınıfın UnmanagedMemoryStream yeni bir örneğini belirtilen uzaklık, uzunluk ve dosya erişimiyle güvenli bir arabellekte 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 sınıfın UnmanagedMemoryStream 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 bir bellek konumunun işaretçisi.
- 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üçük.
-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 true
ayarlarCanWrite. Length özelliği parametresinin length
değerine ayarlanır ve değiştirilemez.
Şunlara uygulanır
UnmanagedMemoryStream(SafeBuffer, Int64, Int64)
- Kaynak:
- UnmanagedMemoryStream.cs
- Kaynak:
- UnmanagedMemoryStream.cs
- Kaynak:
- UnmanagedMemoryStream.cs
Sınıfın UnmanagedMemoryStream yeni bir örneğini belirtilen uzaklık ve uzunluğa sahip güvenli bir arabellekte 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)
- 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 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 bir bellek konumunun işaretçisi.
- 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üçük.
-veya-
Değer capacity
sıfırdan küçük.
-veya-
Değer length
değerden capacity
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.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 akışa okuyor veya eklüyorsanız, 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)
- Kaynak:
- UnmanagedMemoryStream.cs
- Kaynak:
- UnmanagedMemoryStream.cs
- Kaynak:
- UnmanagedMemoryStream.cs
Sınıfın UnmanagedMemoryStream yeni bir örneğini belirtilen uzaklık, uzunluk ve dosya erişimiyle güvenli bir arabellekte 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.