UnmanagedMemoryStream Конструкторы
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Инициализирует новый экземпляр класса UnmanagedMemoryStream.
Перегрузки
UnmanagedMemoryStream() |
Инициализирует новый экземпляр класса UnmanagedMemoryStream. |
UnmanagedMemoryStream(Byte*, Int64) |
Инициализирует новый экземпляр класса UnmanagedMemoryStream с помощью указанного расположения и длины памяти. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64) |
Инициализирует новый экземпляр класса UnmanagedMemoryStream в безопасном буфере с указанным смещением и длиной. |
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess) |
Инициализирует новый экземпляр класса UnmanagedMemoryStream с помощью указанного расположения, длины памяти, общего объема памяти и значений доступа к файлам. |
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess) |
Инициализирует новый экземпляр класса UnmanagedMemoryStream в безопасном буфере с указанным смещением, длиной и доступом к файлам. |
UnmanagedMemoryStream()
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
Инициализирует новый экземпляр класса UnmanagedMemoryStream.
protected:
UnmanagedMemoryStream();
protected UnmanagedMemoryStream ();
Protected Sub New ()
Исключения
У пользователя нет необходимых разрешений.
Применяется к
UnmanagedMemoryStream(Byte*, Int64)
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
Важно!
Этот API несовместим с CLS.
Инициализирует новый экземпляр класса UnmanagedMemoryStream с помощью указанного расположения и длины памяти.
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
Параметры
- pointer
- Byte*
Указатель на неуправляемое расположение памяти.
- length
- Int64
Длина используемой памяти.
- Атрибуты
Исключения
У пользователя нет необходимых разрешений.
Значение pointer
равно null
.
Значение length
меньше нуля.
-или-
length
достаточно велик, чтобы вызвать переполнение.
Примеры
В следующем примере кода показано, как считывать и записывать в неуправляемую память с помощью класса UnmanagedMemoryStream. Блок неуправляемой памяти выделяется и не выделяется с помощью класса 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));
}
}
Комментарии
Этот конструктор создает новый экземпляр класса UnmanagedMemoryStream, а по умолчанию задает для свойства CanWrite значение false
, а свойство CanRead — true
. Свойство Length имеет значение параметра length
и не может быть изменено.
Применяется к
UnmanagedMemoryStream(SafeBuffer, Int64, Int64)
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
Инициализирует новый экземпляр класса UnmanagedMemoryStream в безопасном буфере с указанным смещением и длиной.
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)
Параметры
- buffer
- SafeBuffer
Буфер, содержащий неуправляемый поток памяти.
- offset
- Int64
Позиция байтов в буфере, с которой запускается неуправляемый поток памяти.
- length
- Int64
Длина неуправляемого потока памяти.
Применяется к
UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
Важно!
Этот API несовместим с CLS.
Инициализирует новый экземпляр класса UnmanagedMemoryStream с помощью указанного расположения, длины памяти, общего объема памяти и значений доступа к файлам.
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
Параметры
- pointer
- Byte*
Указатель на неуправляемое расположение памяти.
- length
- Int64
Длина используемой памяти.
- capacity
- Int64
Общий объем памяти, назначенный потоку.
- access
- FileAccess
Одно из FileAccess значений.
- Атрибуты
Исключения
У пользователя нет необходимых разрешений.
Значение pointer
равно null
.
Значение length
меньше нуля.
-или-
Значение capacity
меньше нуля.
-или-
Значение length
больше значения capacity
.
Примеры
В следующем примере кода показано, как считывать и записывать в неуправляемую память с помощью класса UnmanagedMemoryStream. Блок неуправляемой памяти выделяется и не выделяется с помощью класса 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();
}
}
Комментарии
Параметр length
определяет текущий объем используемой памяти. При чтении или добавлении данных в поток значение length
должно быть равно количеству допустимых данных в потоке для чтения или сохранения. Если запись в поток, это значение должно быть равно нулю.
Параметр capacity
указывает объем доступной общей памяти. Это значение может описать регион, который превышает указанную длину, или указать регион, к которому можно добавить. Любая попытка записи за пределами этого значения завершится ошибкой.
Параметр access
задает свойства CanReadи CanWrite. Обратите внимание, что указание Write не гарантирует, что поток будет записываемым. Параметры доступа позволяют реализации создавать объект, реализация которого может соответствовать фактическому потоку, который предоставляется.
Применяется к
UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
- Исходный код:
- UnmanagedMemoryStream.cs
Инициализирует новый экземпляр класса UnmanagedMemoryStream в безопасном буфере с указанным смещением, длиной и доступом к файлам.
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)
Параметры
- buffer
- SafeBuffer
Буфер, содержащий неуправляемый поток памяти.
- offset
- Int64
Позиция байтов в буфере, с которой запускается неуправляемый поток памяти.
- length
- Int64
Длина неуправляемого потока памяти.
- access
- FileAccess
Режим доступа к неуправляемой памяти.