UnmanagedMemoryStream Класс

Определение

Важно!

Этот API несовместим с CLS.

Предоставляет доступ к неуправляемым блокам памяти из управляемого кода.

public ref class UnmanagedMemoryStream : System::IO::Stream
public class UnmanagedMemoryStream : System.IO.Stream
[System.CLSCompliant(false)]
public class UnmanagedMemoryStream : System.IO.Stream
type UnmanagedMemoryStream = class
    inherit Stream
[<System.CLSCompliant(false)>]
type UnmanagedMemoryStream = class
    inherit Stream
Public Class UnmanagedMemoryStream
Inherits Stream
Наследование
UnmanagedMemoryStream
Наследование
UnmanagedMemoryStream
Производный
Атрибуты

Примеры

В следующем примере кода показано, как считывать из неуправляемой памяти и записывать их в неуправляемую память с помощью 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();
    }
}

Комментарии

Этот класс поддерживает доступ к неуправляемой памяти с помощью существующей модели на основе потока и не требует копирования содержимого в неуправляемой памяти в кучу.

Примечание

Этот тип реализует интерфейс IDisposable, но никакие ресурсы не удаляет. Это означает, что вам не обязательно его удалять, вызывая непосредственно Dispose() или используя такие языковые конструкции, как using (C#) или Using (Visual Basic).

Конструкторы

UnmanagedMemoryStream()

Инициализирует новый экземпляр класса UnmanagedMemoryStream.

UnmanagedMemoryStream(Byte*, Int64)

Инициализирует новый экземпляр класса UnmanagedMemoryStream, используя заданное расположение и объем памяти.

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

Инициализирует новый экземпляр класса UnmanagedMemoryStream, используя указанные значения расположения, объема памяти, общего объема памяти и доступа к файлам.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Инициализирует новый экземпляр класса UnmanagedMemoryStream в безопасном буфере с указанным смещением и длиной.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

Инициализирует новый экземпляр класса UnmanagedMemoryStream в безопасном буфере с указанными смещением, длиной и правами доступа к файлам.

Свойства

CanRead

Получает значение, определяющее, поддерживает ли поток операции чтения.

CanSeek

Возвращает значение, определяющее, поддерживает ли поток операции поиска.

CanTimeout

Возвращает значение, которое показывает, может ли для данного потока истечь время ожидания.

(Унаследовано от Stream)
CanWrite

Возвращает значение, определяющее, поддерживает ли поток операции записи.

Capacity

Возвращает длину потока (размер) или общий объем памяти, назначенный потоку (емкость).

Length

Возвращает длину данных в потоке.

Position

Получает или задает текущую позицию в потоке.

PositionPointer

Получает или задает указатель байтов для потока, используя текущее положение в потоке.

ReadTimeout

Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции чтения.

(Унаследовано от Stream)
WriteTimeout

Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции записи.

(Унаследовано от Stream)

Методы

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Начинает операцию асинхронного чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)

(Унаследовано от Stream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Начинает операцию асинхронной записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32).)

(Унаследовано от Stream)
Close()

Закрывает текущий поток и отключает все ресурсы (например, сокеты и файловые дескрипторы), связанные с текущим потоком. Вместо вызова данного метода, убедитесь в том, что поток надлежащим образом ликвидирован.

(Унаследовано от Stream)
CopyTo(Stream)

Считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков перемещаются по количеству скопированных байтов.

(Унаследовано от Stream)
CopyTo(Stream, Int32)

Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков перемещаются по количеству скопированных байтов.

(Унаследовано от Stream)
CopyToAsync(Stream)

Асинхронно считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков перемещаются по количеству скопированных байтов.

(Унаследовано от Stream)
CopyToAsync(Stream, CancellationToken)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный токен отмены. Обе позиции потоков перемещаются по количеству скопированных байтов.

(Унаследовано от Stream)
CopyToAsync(Stream, Int32)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков перемещаются по количеству скопированных байтов.

(Унаследовано от Stream)
CopyToAsync(Stream, Int32, CancellationToken)

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и токен отмены. Обе позиции потоков перемещаются по количеству скопированных байтов.

(Унаследовано от Stream)
CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

(Унаследовано от MarshalByRefObject)
CreateWaitHandle()
Является устаревшей.
Является устаревшей.
Является устаревшей.

Выделяет объект WaitHandle.

(Унаследовано от Stream)
Dispose()

Освобождает все ресурсы, занятые модулем Stream.

(Унаследовано от Stream)
Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом UnmanagedMemoryStream, а при необходимости освобождает также управляемые ресурсы.

DisposeAsync()

Асинхронно освобождает неуправляемые ресурсы, используемые классом Stream.

(Унаследовано от Stream)
EndRead(IAsyncResult)

Ожидает завершения отложенного асинхронного чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)

(Унаследовано от Stream)
EndWrite(IAsyncResult)

Заканчивает операцию асинхронной записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32).)

(Унаследовано от Stream)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Flush()

Переопределяет метод Flush() так, что никакие действия не выполняются.

FlushAsync()

Асинхронно очищает все буферы для этого потока и вызывает запись всех буферизованных данных в базовое устройство.

(Унаследовано от Stream)
FlushAsync(CancellationToken)

Переопределяет метод FlushAsync(CancellationToken) так, что операция отменяется, если это указано, но никакие другие действия не выполняются.

FlushAsync(CancellationToken)

Асинхронно очищает все буферы данного потока, вызывает запись буферизованных данных в базовое устройство и отслеживает запросы отмены.

(Унаследовано от Stream)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()
Является устаревшей.

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

(Унаследовано от MarshalByRefObject)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
Initialize(Byte*, Int64, Int64, FileAccess)

Инициализирует новый экземпляр класса UnmanagedMemoryStream, используя указатель на неуправляемое расположение в памяти.

Initialize(SafeBuffer, Int64, Int64, FileAccess)

Инициализирует новый экземпляр класса UnmanagedMemoryStream в безопасном буфере с указанными смещением, длиной и правами доступа к файлам.

InitializeLifetimeService()
Является устаревшей.

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неполную копию текущего объекта MarshalByRefObject.

(Унаследовано от MarshalByRefObject)
ObjectInvariant()
Является устаревшей.

Обеспечивает поддержку для Contract.

(Унаследовано от Stream)
Read(Byte[], Int32, Int32)

Считывает указанное число байтов в указанный массив.

Read(Span<Byte>)

Считывает все байты этого неуправляемого потока памяти в указанный диапазон байтов.

Read(Span<Byte>)

При переопределении в производном классе считывает последовательность байтов из текущего потока и перемещает позицию в потоке на число считанных байтов.

(Унаследовано от Stream)
ReadAsync(Byte[], Int32, Int32)

Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию внутри потока на число считанных байтов.

(Унаследовано от Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken)

Считывает в асинхронном режиме указанное число байтов в указанный массив.

ReadAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно считывает последовательность байтов из текущего потока, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены.

(Унаследовано от Stream)
ReadAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает байты неуправляемого потока памяти в область памяти.

ReadAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает последовательность байтов из текущего потока, перемещает позицию в потоке на число считанных байтов и отслеживает запросы отмены.

(Унаследовано от Stream)
ReadAtLeast(Span<Byte>, Int32, Boolean)

Считывает по крайней мере минимальное количество байтов из текущего потока и перемещает позицию в потоке на число прочитанных байтов.

(Унаследовано от Stream)
ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Асинхронно считывает по крайней мере минимальное количество байтов из текущего потока, перемещает позицию в потоке на число прочитанных байтов и отслеживает запросы на отмену.

(Унаследовано от Stream)
ReadByte()

Считывает байт из потока и перемещает позицию в потоке на один байт или возвращает -1, если достигнут конец потока.

ReadExactly(Byte[], Int32, Int32)

Считывает count число байтов из текущего потока и перемещает позицию в потоке.

(Унаследовано от Stream)
ReadExactly(Span<Byte>)

Считывает байты из текущего потока и перемещает позицию в потоке до buffer заполнения.

(Унаследовано от Stream)
ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно считывает count количество байтов из текущего потока, перемещает позицию в потоке и отслеживает запросы на отмену.

(Унаследовано от Stream)
ReadExactlyAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает байты из текущего потока, перемещает позицию в потоке до buffer заполнения и отслеживает запросы на отмену.

(Унаследовано от Stream)
Seek(Int64, SeekOrigin)

Устанавливает текущую позицию текущего потока на заданное значение.

SetLength(Int64)

Присваивает длине потока указанное значение.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
Write(Byte[], Int32, Int32)

Записывает в текущий поток блок байтов, используя данные из буфера.

Write(ReadOnlySpan<Byte>)

Записывает блок байтов в текущий неуправляемый поток памяти, используя данные из указанного диапазона байтов.

Write(ReadOnlySpan<Byte>)

При переопределении в производном классе записывает последовательность байтов в текущий поток и перемещает текущую позицию в нем вперед на число записанных байтов.

(Унаследовано от Stream)
WriteAsync(Byte[], Int32, Int32)

Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию внутри потока на число записанных байтов.

(Унаследовано от Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.

WriteAsync(Byte[], Int32, Int32, CancellationToken)

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.

(Унаследовано от Stream)
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Асинхронно записывает диапазон байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.

(Унаследовано от Stream)
WriteByte(Byte)

Запись байта в текущую позицию в потоке файла.

Методы расширения

AsInputStream(Stream)

Преобразует управляемый поток в .NET для приложений Магазина Windows во входной поток в среде выполнения Windows.

AsOutputStream(Stream)

Преобразует управляемый поток в .NET для приложений Магазина Windows в поток вывода в среде выполнения Windows.

AsRandomAccessStream(Stream)

Преобразует заданный поток в поток прямого доступа.

ConfigureAwait(IAsyncDisposable, Boolean)

Настраивает способ выполнения ожиданий для задач, возвращаемых из асинхронного высвобождаемого объекта.

Применяется к