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 класса и по умолчанию задает свойству false
CanWrite значение , а свойству 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
Режим доступа к файлам для потока неуправляемой памяти.