UnmanagedMemoryStream Класс

Определение

Важно!

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

Предоставляет доступ к неуправляемым блокам памяти из управляемого кода.Provides access to unmanaged blocks of memory from managed code.

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

Примеры

В следующем примере кода показано, как выполнять чтение из неуправляемой памяти и запись в нее с помощью класса UnmanagedMemoryStream.The following code example demonstrates how to read from and write to unmanaged memory using the UnmanagedMemoryStream class. Блок неуправляемой памяти выделяется и освобождается с помощью класса Marshal.A block of unmanaged memory is allocated and de-allocated using the Marshal class.


// 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();
    }
}

Комментарии

Этот класс поддерживает доступ к неуправляемой памяти с помощью существующей модели на основе потока и не требует, чтобы содержимое в неуправляемой памяти копировалось в кучу.This class supports access to unmanaged memory using the existing stream-based model and does not require that the contents in the unmanaged memory be copied to the heap.

Примечание

Этот тип реализует интерфейс IDisposable, но никакие ресурсы не удаляет.This type implements the IDisposable interface, but does not actually have any resources to dispose. Это означает, что вам не обязательно его удалять, вызывая непосредственно Dispose() или используя такие языковые конструкции, как using (C#) или Using (Visual Basic).This means that disposing it by directly calling Dispose() or by using a language construct such as using (in C#) or Using (in Visual Basic) is not necessary.

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

UnmanagedMemoryStream()

Инициализирует новый экземпляр класса UnmanagedMemoryStream.Initializes a new instance of the UnmanagedMemoryStream class.

UnmanagedMemoryStream(Byte*, Int64)

Инициализирует новый экземпляр класса UnmanagedMemoryStream, используя заданное расположение и объем памяти.Initializes a new instance of the UnmanagedMemoryStream class using the specified location and memory length.

UnmanagedMemoryStream(Byte*, Int64, Int64, FileAccess)

Инициализирует новый экземпляр класса UnmanagedMemoryStream, используя указанные значения расположения, объема памяти, общего объема памяти и доступа к файлам.Initializes a new instance of the UnmanagedMemoryStream class using the specified location, memory length, total amount of memory, and file access values.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64)

Инициализирует новый экземпляр класса UnmanagedMemoryStream в безопасном буфере с указанным смещением и длиной.Initializes a new instance of the UnmanagedMemoryStream class in a safe buffer with a specified offset and length.

UnmanagedMemoryStream(SafeBuffer, Int64, Int64, FileAccess)

Инициализирует новый экземпляр класса UnmanagedMemoryStream в безопасном буфере с указанными смещением, длиной и правами доступа к файлам.Initializes a new instance of the UnmanagedMemoryStream class in a safe buffer with a specified offset, length, and file access.

Свойства

CanRead

Возвращает значение, определяющее, поддерживает ли поток операции чтения.Gets a value indicating whether a stream supports reading.

CanSeek

Возвращает значение, определяющее, поддерживает ли поток операции поиска.Gets a value indicating whether a stream supports seeking.

CanTimeout

Возвращает значение, которое показывает, может ли для данного потока истечь время ожидания.Gets a value that determines whether the current stream can time out.

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

Возвращает значение, определяющее, поддерживает ли поток операции записи.Gets a value indicating whether a stream supports writing.

Capacity

Возвращает длину потока (размер) или общий объем памяти, назначенный потоку (емкость).Gets the stream length (size) or the total amount of memory assigned to a stream (capacity).

Length

Возвращает длину данных в потоке.Gets the length of the data in a stream.

Position

Возвращает или задает текущую позицию в потоке.Gets or sets the current position in a stream.

PositionPointer

Возвращает или задает указатель байтов для потока, используя текущее положение в потоке.Gets or sets a byte pointer to a stream based on the current position in the stream.

ReadTimeout

Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции чтения.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to read before timing out.

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

Возвращает или задает значение в миллисекундах, определяющее период времени, отведенного потоку на выполнение операции записи.Gets or sets a value, in milliseconds, that determines how long the stream will attempt to write before timing out.

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

Методы

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

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

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

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

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

Закрывает текущий поток и отключает все ресурсы (например, сокеты и файловые дескрипторы), связанные с текущим потоком.Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream. Вместо вызова данного метода, убедитесь в том, что поток надлежащим образом ликвидирован.Instead of calling this method, ensure that the stream is properly disposed.

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

Считывает байты из текущего потока и записывает их в другой поток.Reads the bytes from the current stream and writes them to another stream.

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

Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера.Reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

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

Асинхронно считывает байты из текущего потока и записывает их в другой поток.Asynchronously reads the bytes from the current stream and writes them to another stream.

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

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный токен отмены.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified cancellation token.

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

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

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

Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и токен отмены.Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size and cancellation token.

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

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

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

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

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

Освобождает все ресурсы, используемые Stream.Releases all resources used by the Stream.

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

Освобождает неуправляемые ресурсы, используемые UnmanagedMemoryStream, и дополнительно освобождает управляемые ресурсы.Releases the unmanaged resources used by the UnmanagedMemoryStream and optionally releases the managed resources.

DisposeAsync()

Асинхронно освобождает неуправляемые ресурсы, используемые классом Stream.Asynchronously releases the unmanaged resources used by the Stream.

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

Ожидает завершения отложенного асинхронного чтения.Waits for the pending asynchronous read to complete. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32).)(Consider using ReadAsync(Byte[], Int32, Int32) instead.)

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

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

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

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

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

Переопределяет метод Flush() так, что никакие действия не выполняются.Overrides the Flush() method so that no action is performed.

FlushAsync()

Асинхронно очищает все буферы для этого потока и вызывает запись всех буферизованных данных в базовое устройство.Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

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

Переопределяет метод FlushAsync(CancellationToken) так, что операция отменяется, если это указано, но никакие другие действия не выполняются.Overrides the FlushAsync(CancellationToken) method so that the operation is cancelled if specified, but no other action is performed.

GetHashCode()

Служит в качестве хэш-функции по умолчанию.Serves as the default hash function.

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

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.Retrieves the current lifetime service object that controls the lifetime policy for this instance.

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

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

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

Инициализирует новый экземпляр класса UnmanagedMemoryStream, используя указатель на неуправляемое расположение в памяти.Initializes a new instance of the UnmanagedMemoryStream class by using a pointer to an unmanaged memory location.

Initialize(SafeBuffer, Int64, Int64, FileAccess)

Инициализирует новый экземпляр класса UnmanagedMemoryStream в безопасном буфере с указанными смещением, длиной и правами доступа к файлам.Initializes a new instance of the UnmanagedMemoryStream class in a safe buffer with a specified offset, length, and file access.

InitializeLifetimeService()

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.Obtains a lifetime service object to control the lifetime policy for this instance.

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

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

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

Создает неполную копию текущего объекта MarshalByRefObject.Creates a shallow copy of the current MarshalByRefObject object.

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

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

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

Считывает указанное число байтов в указанный массив.Reads the specified number of bytes into the specified array.

Read(Span<Byte>)

Считывает все байты этого неуправляемого потока памяти в указанный диапазон байтов.Reads all the bytes of this unmanaged memory stream into the specified span of bytes.

ReadAsync(Byte[], Int32, Int32)

Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию внутри потока на число считанных байтов.Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

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

Считывает в асинхронном режиме указанное число байтов в указанный массив.Asynchronously reads the specified number of bytes into the specified array.

ReadAsync(Memory<Byte>, CancellationToken)

Асинхронно считывает байты неуправляемого потока памяти в область памяти.Asynchronously reads the unmanaged memory stream bytes into the memory region.

ReadByte()

Считывает байт из потока и перемещает позицию в потоке на один байт или возвращает -1, если достигнут конец потока.Reads a byte from a stream and advances the position within the stream by one byte, or returns -1 if at the end of the stream.

Seek(Int64, SeekOrigin)

Устанавливает текущую позицию текущего потока на заданное значение.Sets the current position of the current stream to the given value.

SetLength(Int64)

Присваивает длине потока указанное значение.Sets the length of a stream to a specified value.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

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

Записывает в текущий поток блок байтов, используя данные из буфера.Writes a block of bytes to the current stream using data from a buffer.

Write(ReadOnlySpan<Byte>)

Записывает блок байтов в текущий неуправляемый поток памяти, используя данные из указанного диапазона байтов.Writes a block of bytes to the current unmanaged memory stream using data from the provided span of bytes.

WriteAsync(Byte[], Int32, Int32)

Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию внутри потока на число записанных байтов.Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

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

Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.Asynchronously writes a sequence of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Асинхронно записывает диапазон байтов в текущий поток, перемещает текущую позицию внутри потока на число записанных байтов и отслеживает запросы отмены.Asynchronously writes a span of bytes to the current stream, advances the current position within this stream by the number of bytes written, and monitors cancellation requests.

WriteByte(Byte)

Запись байта в текущую позицию в потоке файла.Writes a byte to the current position in the file stream.

Явные реализации интерфейса

IDisposable.Dispose()

Освобождает все ресурсы, используемые Stream.Releases all resources used by the Stream.

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

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

AsInputStream(Stream)

Преобразует управляемый поток в .NET для приложений Магазина Windows во входной поток в среде выполнения Windows.Converts a managed stream in the .NET for Windows Store apps to an input stream in the Windows Runtime.

AsOutputStream(Stream)

Преобразует управляемый поток в .NET для приложений Магазина Windows в поток вывода в среде выполнения Windows.Converts a managed stream in the .NET for Windows Store apps to an output stream in the Windows Runtime.

AsRandomAccessStream(Stream)

Преобразует заданный поток в поток прямого доступа.Converts the specified stream to a random access stream.

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