UnmanagedMemoryStream Konstruktor
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menginisialisasi instans baru kelas UnmanagedMemoryStream.
Overload
UnmanagedMemoryStream() |
Menginisialisasi instans baru kelas UnmanagedMemoryStream. |
UnmanagedMemoryStream(Byte*, Int64) |
Menginisialisasi instans baru kelas UnmanagedMemoryStream menggunakan lokasi dan panjang memori yang ditentukan. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Menginisialisasi instans baru kelas UnmanagedMemoryStream dalam buffer aman dengan offset dan panjang yang ditentukan. |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Menginisialisasi instans baru kelas UnmanagedMemoryStream menggunakan lokasi, panjang memori, jumlah total memori, dan nilai akses file yang ditentukan. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Menginisialisasi instans baru kelas UnmanagedMemoryStream dalam buffer aman dengan offset, panjang, dan akses file tertentu. |
UnmanagedMemoryStream()
- Sumber:
- UnmanagedMemoryStream.cs
- Sumber:
- UnmanagedMemoryStream.cs
- Sumber:
- UnmanagedMemoryStream.cs
Menginisialisasi instans baru kelas UnmanagedMemoryStream.
protected:
UnmanagedMemoryStream();
protected UnmanagedMemoryStream ();
Protected Sub New ()
Pengecualian
Pengguna tidak memiliki izin yang diperlukan.
Berlaku untuk
UnmanagedMemoryStream(Byte*, Int64)
- Sumber:
- UnmanagedMemoryStream.cs
- Sumber:
- UnmanagedMemoryStream.cs
- Sumber:
- UnmanagedMemoryStream.cs
Penting
API ini bukan kompatibel CLS.
Menginisialisasi instans baru kelas UnmanagedMemoryStream menggunakan lokasi dan panjang memori yang ditentukan.
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
Parameter
- pointer
- Byte*
Penunjuk ke lokasi memori yang tidak dikelola.
- length
- Int64
Panjang memori yang akan digunakan.
- Atribut
Pengecualian
Pengguna tidak memiliki izin yang diperlukan.
Nilai pointer
null
.
Nilai length
kurang dari nol.
-atau-
length
cukup besar untuk menyebabkan luapan.
Contoh
Contoh kode berikut menunjukkan cara membaca dari dan menulis ke memori yang tidak dikelola menggunakan kelas UnmanagedMemoryStream. Blok memori yang tidak dikelola dialokasikan dan dibatalkan alokasinya menggunakan kelas Marshal.
// 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));
}
}
Keterangan
Konstruktor ini membuat instans baru kelas UnmanagedMemoryStream, dan secara default mengatur properti CanWrite ke false
dan properti CanRead ke true
. Properti Length diatur ke nilai parameter length
dan tidak dapat diubah.
Berlaku untuk
UnmanagedMemoryStream(SafeBuffer, Int64, Int64)
- Sumber:
- UnmanagedMemoryStream.cs
- Sumber:
- UnmanagedMemoryStream.cs
- Sumber:
- UnmanagedMemoryStream.cs
Menginisialisasi instans baru kelas UnmanagedMemoryStream dalam buffer aman dengan offset dan panjang yang ditentukan.
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)
Parameter
- buffer
- SafeBuffer
Buffer untuk berisi aliran memori yang tidak dikelola.
- offset
- Int64
Posisi byte di buffer untuk memulai aliran memori yang tidak dikelola.
- length
- Int64
Panjang aliran memori yang tidak dikelola.
Berlaku untuk
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)
- Sumber:
- UnmanagedMemoryStream.cs
- Sumber:
- UnmanagedMemoryStream.cs
- Sumber:
- UnmanagedMemoryStream.cs
Penting
API ini bukan kompatibel CLS.
Menginisialisasi instans baru kelas UnmanagedMemoryStream menggunakan lokasi, panjang memori, jumlah total memori, dan nilai akses file yang ditentukan.
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
Parameter
- pointer
- Byte*
Penunjuk ke lokasi memori yang tidak dikelola.
- length
- Int64
Panjang memori yang akan digunakan.
- capacity
- Int64
Jumlah total memori yang ditetapkan ke aliran.
- access
- FileAccess
Salah satu nilai FileAccess.
- Atribut
Pengecualian
Pengguna tidak memiliki izin yang diperlukan.
Nilai pointer
null
.
Nilai length
kurang dari nol.
-atau-
Nilai capacity
kurang dari nol.
-atau-
Nilai length
lebih besar dari nilai capacity
.
Contoh
Contoh kode berikut menunjukkan cara membaca dari dan menulis ke memori yang tidak dikelola menggunakan kelas UnmanagedMemoryStream. Blok memori yang tidak dikelola dialokasikan dan dibatalkan alokasinya menggunakan kelas Marshal.
// 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();
}
}
Keterangan
Parameter length
menentukan jumlah memori saat ini yang digunakan. Jika membaca atau menambahkan data ke aliran, nilai length
harus sama dengan jumlah data yang valid dalam aliran yang akan dibaca atau dipertahankan. Jika menulis ke aliran, nilai ini harus nol.
Parameter capacity
menunjukkan jumlah total memori yang tersedia. Nilai ini dapat menjelaskan wilayah yang lebih panjang dari panjang yang ditentukan, atau menunjukkan wilayah yang dapat ditambahkan. Setiap upaya untuk menulis di luar nilai ini akan gagal.
Parameter access
mengatur properti CanRead, dan CanWrite. Perhatikan bahwa menentukan Write tidak menjamin bahwa aliran akan dapat ditulis. Parameter akses memungkinkan pelaksana untuk membuat objek yang implementasinya dapat cocok dengan aliran aktual yang diekspos.
Berlaku untuk
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)
- Sumber:
- UnmanagedMemoryStream.cs
- Sumber:
- UnmanagedMemoryStream.cs
- Sumber:
- UnmanagedMemoryStream.cs
Menginisialisasi instans baru kelas UnmanagedMemoryStream dalam buffer aman dengan offset, panjang, dan akses file tertentu.
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)
Parameter
- buffer
- SafeBuffer
Buffer untuk berisi aliran memori yang tidak dikelola.
- offset
- Int64
Posisi byte di buffer untuk memulai aliran memori yang tidak dikelola.
- length
- Int64
Panjang aliran memori yang tidak dikelola.
- access
- FileAccess
Mode akses file ke aliran memori yang tidak dikelola.