MemoryStream Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Создает поток, резервный хранилище которого является памятью.
public ref class MemoryStream : System::IO::Stream
public class MemoryStream : System.IO.Stream
[System.Serializable]
public class MemoryStream : System.IO.Stream
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class MemoryStream : System.IO.Stream
type MemoryStream = class
inherit Stream
[<System.Serializable>]
type MemoryStream = class
inherit Stream
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type MemoryStream = class
inherit Stream
Public Class MemoryStream
Inherits Stream
- Наследование
- Наследование
- Атрибуты
Примеры
В следующем примере кода показано, как считывать и записывать данные с помощью памяти в качестве резервного хранилища.
using System;
using System.IO;
using System.Text;
class MemStream
{
static void Main()
{
int count;
byte[] byteArray;
char[] charArray;
UnicodeEncoding uniEncoding = new UnicodeEncoding();
// Create the data to write to the stream.
byte[] firstString = uniEncoding.GetBytes(
"Invalid file path characters are: ");
byte[] secondString = uniEncoding.GetBytes(
Path.GetInvalidPathChars());
using(MemoryStream memStream = new MemoryStream(100))
{
// Write the first string to the stream.
memStream.Write(firstString, 0 , firstString.Length);
// Write the second string to the stream, byte by byte.
count = 0;
while(count < secondString.Length)
{
memStream.WriteByte(secondString[count++]);
}
// Write the stream properties to the console.
Console.WriteLine(
"Capacity = {0}, Length = {1}, Position = {2}\n",
memStream.Capacity.ToString(),
memStream.Length.ToString(),
memStream.Position.ToString());
// Set the position to the beginning of the stream.
memStream.Seek(0, SeekOrigin.Begin);
// Read the first 20 bytes from the stream.
byteArray = new byte[memStream.Length];
count = memStream.Read(byteArray, 0, 20);
// Read the remaining bytes, byte by byte.
while(count < memStream.Length)
{
byteArray[count++] = (byte)memStream.ReadByte();
}
// Decode the byte array into a char array
// and write it to the console.
charArray = new char[uniEncoding.GetCharCount(
byteArray, 0, count)];
uniEncoding.GetDecoder().GetChars(
byteArray, 0, count, charArray, 0);
Console.WriteLine(charArray);
}
}
}
Imports System.IO
Imports System.Text
Module MemStream
Sub Main()
Dim count As Integer
Dim byteArray As Byte()
Dim charArray As Char()
Dim uniEncoding As New UnicodeEncoding()
' Create the data to write to the stream.
Dim firstString As Byte() = _
uniEncoding.GetBytes("Invalid file path characters are: ")
Dim secondString As Byte() = _
uniEncoding.GetBytes(Path.GetInvalidPathChars())
Dim memStream As New MemoryStream(100)
Try
' Write the first string to the stream.
memStream.Write(firstString, 0 , firstString.Length)
' Write the second string to the stream, byte by byte.
count = 0
While(count < secondString.Length)
memStream.WriteByte(secondString(count))
count += 1
End While
' Write the stream properties to the console.
Console.WriteLine( _
"Capacity = {0}, Length = {1}, Position = {2}", _
memStream.Capacity.ToString(), _
memStream.Length.ToString(), _
memStream.Position.ToString())
' Set the stream position to the beginning of the stream.
memStream.Seek(0, SeekOrigin.Begin)
' Read the first 20 bytes from the stream.
byteArray = _
New Byte(CType(memStream.Length, Integer)){}
count = memStream.Read(byteArray, 0, 20)
' Read the remaining Bytes, Byte by Byte.
While(count < memStream.Length)
byteArray(count) = _
Convert.ToByte(memStream.ReadByte())
count += 1
End While
' Decode the Byte array into a Char array
' and write it to the console.
charArray = _
New Char(uniEncoding.GetCharCount( _
byteArray, 0, count)){}
uniEncoding.GetDecoder().GetChars( _
byteArray, 0, count, charArray, 0)
Console.WriteLine(charArray)
Finally
memStream.Close()
End Try
End Sub
End Module
Комментарии
Текущая позиция потока — это позиция, в которой может произойти следующая операция чтения или записи. Текущая позиция может быть получена или задана Seek с помощью метода. При создании нового экземпляра текущее MemoryStream положение равно нулю.
Note
Этот тип реализует IDisposable интерфейс, но на самом деле не имеет ресурсов для удаления. Это означает, что удаление его путем прямого вызова Dispose() или с помощью языковой конструкции, например using (в C#) или Using (в Visual Basic) не требуется.
Потоки памяти, созданные с массивом байтов без знака, предоставляют неизменяемый поток данных. При использовании массива байтов нельзя ни добавлять в поток, ни сжимать поток, хотя можно изменить существующее содержимое в зависимости от параметров, переданных в конструктор. Пустые потоки памяти доступны для изменения размера и могут быть записаны в и считываться из него.
MemoryStream Если объект добавляется в resX-файл или файл ресурсов, вызовите GetStream метод во время выполнения, чтобы получить его.
MemoryStream Если объект сериализуется в файл ресурса, он фактически сериализуется как объектUnmanagedMemoryStream. Это поведение обеспечивает более высокую производительность, а также возможность напрямую получать указатель на данные без необходимости проходить через Stream методы.
Конструкторы
| Имя | Описание |
|---|---|
| MemoryStream() |
Инициализирует новый экземпляр MemoryStream класса с расширяемой емкостью, инициализируемой до нуля. |
| MemoryStream(Byte[], Boolean) |
Инициализирует новый неизменяемый экземпляр MemoryStream класса на основе указанного массива байтов с заданным свойством CanWrite . |
| MemoryStream(Byte[], Int32, Int32, Boolean, Boolean) |
Инициализирует новый экземпляр MemoryStream класса на основе указанного региона массива байтов, с CanWrite заданным свойством и возможностью вызова GetBuffer() заданного значения. |
| MemoryStream(Byte[], Int32, Int32, Boolean) |
Инициализирует новый неизменяемый экземпляр MemoryStream класса на основе указанного региона массива байтов с CanWrite заданным свойством. |
| MemoryStream(Byte[], Int32, Int32) |
Инициализирует новый неизменяемый экземпляр MemoryStream класса на основе указанного региона (индекса) массива байтов. |
| MemoryStream(Byte[]) |
Инициализирует новый неизменяемый экземпляр класса на основе указанного MemoryStream массива байтов. |
| MemoryStream(Int32) |
Инициализирует новый экземпляр MemoryStream класса с расширяемой емкостью, инициализируемой как указано. |
Свойства
| Имя | Описание |
|---|---|
| CanRead |
Возвращает значение, указывающее, поддерживает ли текущий поток чтение. |
| CanSeek |
Возвращает значение, указывающее, поддерживает ли текущий поток поиск. |
| CanTimeout |
Возвращает значение, определяющее, может ли текущий поток истекает время ожидания. (Унаследовано от Stream) |
| CanWrite |
Возвращает значение, указывающее, поддерживает ли текущий поток запись. |
| Capacity |
Возвращает или задает количество байтов, выделенных для этого потока. |
| Length |
Возвращает длину потока в байтах. |
| Position |
Возвращает или задает текущую позицию в потоке. |
| ReadTimeout |
Возвращает или задает значение в миллисекундах, которое определяет, сколько времени поток попытается прочитать до истечения времени ожидания. (Унаследовано от Stream) |
| WriteTimeout |
Возвращает или задает значение в миллисекундах, определяющее, сколько времени поток попытается записать до истечения времени ожидания. (Унаследовано от Stream) |
Методы
| Имя | Описание |
|---|---|
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Начинает асинхронную операцию чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32, CancellationToken) вместо этого.) |
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Начинает асинхронную операцию чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32) вместо этого.) (Унаследовано от Stream) |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Начинает асинхронную операцию записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32, CancellationToken) вместо этого.) |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Начинает асинхронную операцию записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32) вместо этого.) (Унаследовано от Stream) |
| Close() |
Закрывает поток для чтения и записи. |
| Close() |
Закрывает текущий поток и освобождает все ресурсы (например, сокеты и дескрипторы файлов), связанные с текущим потоком. Вместо вызова этого метода убедитесь, что поток правильно удален. (Унаследовано от Stream) |
| CopyTo(Stream, Int32) |
Считывает байты из текущего потока памяти и записывает их в другой поток, используя указанный размер буфера. |
| CopyTo(Stream, Int32) |
Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CopyTo(Stream) |
Считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CopyToAsync(Stream, CancellationToken) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток с помощью указанного маркера отмены. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CopyToAsync(Stream, Int32, CancellationToken) |
Асинхронно считывает все байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и маркер отмены. |
| CopyToAsync(Stream, Int32, CancellationToken) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и маркер отмены. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CopyToAsync(Stream, Int32) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CopyToAsync(Stream) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
| CreateObjRef(Type) |
Создает объект, содержащий все соответствующие сведения, необходимые для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
| CreateWaitHandle() |
Устаревшие..
Устаревшие..
Устаревшие..
Выделяет объект WaitHandle. (Унаследовано от Stream) |
| Dispose() |
Освобождает все ресурсы, используемые параметром Stream. (Унаследовано от Stream) |
| Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые классом MemoryStream , и при необходимости освобождает управляемые ресурсы. |
| DisposeAsync() |
Асинхронно освобождает неуправляемые ресурсы, используемые Streamв . (Унаследовано от Stream) |
| EndRead(IAsyncResult) |
Ожидает завершения ожидающего асинхронного чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32, CancellationToken) вместо этого.) |
| EndRead(IAsyncResult) |
Ожидает завершения ожидающего асинхронного чтения. (Рекомендуется использовать ReadAsync(Byte[], Int32, Int32) вместо этого.) (Унаследовано от Stream) |
| EndWrite(IAsyncResult) |
Завершает асинхронную операцию записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32, CancellationToken) вместо этого.) |
| EndWrite(IAsyncResult) |
Завершает асинхронную операцию записи. (Рекомендуется использовать WriteAsync(Byte[], Int32, Int32) вместо этого.) (Унаследовано от Stream) |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| Flush() |
Переопределяет Flush() метод таким образом, чтобы действие не выполнялось. |
| FlushAsync() |
Асинхронно очищает все буферы для этого потока и приводит к записи всех буферных данных на базовое устройство. (Унаследовано от Stream) |
| FlushAsync(CancellationToken) |
Асинхронно очищает все буферы для этого потока и отслеживает запросы на отмену. |
| GetBuffer() |
Возвращает массив неподписанных байтов, из которых был создан этот поток. |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetLifetimeService() |
Устаревшие..
Извлекает текущий объект службы времени существования, который управляет политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| InitializeLifetimeService() |
Устаревшие..
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| MemberwiseClone(Boolean) |
Создает неглубокую копию текущего MarshalByRefObject объекта. (Унаследовано от MarshalByRefObject) |
| ObjectInvariant() |
Этот API поддерживает инфраструктуру продукта и не предназначен для использования непосредственно из программного кода. Предоставляет поддержку Contract. |
| ObjectInvariant() |
Устаревшие..
Предоставляет поддержку Contract. (Унаследовано от Stream) |
| Read(Byte[], Int32, Int32) |
Считывает блок байтов из текущего потока и записывает данные в буфер. |
| Read(Span<Byte>) |
Считывает последовательность байтов из текущего потока памяти и перемещает позицию в потоке памяти по количеству операций чтения байтов. |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно считывает последовательность байтов из текущего потока, перемещает положение в потоке по количеству операций чтения байтов и отслеживает запросы на отмену. |
| ReadAsync(Byte[], Int32, Int32) |
Асинхронно считывает последовательность байтов из текущего потока и перемещает позицию в потоке по числу байтов. (Унаследовано от Stream) |
| ReadAsync(Memory<Byte>, CancellationToken) |
Асинхронно считывает последовательность байтов из текущего потока памяти, записывает последовательность |
| ReadAtLeast(Span<Byte>, Int32, Boolean) |
Считывает по крайней мере минимальное количество байтов из текущего потока и перемещает положение в потоке по количеству байтов, считываемых. (Унаследовано от Stream) |
| ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Асинхронно считывает по крайней мере минимальное количество байтов из текущего потока, перемещает положение в потоке по количеству операций чтения байтов и отслеживает запросы на отмену. (Унаследовано от Stream) |
| ReadByte() |
Считывает байт из текущего потока. |
| ReadExactly(Byte[], Int32, Int32) |
Считывает количество байтов из текущего потока и перемещает |
| ReadExactly(Span<Byte>) |
Считывает байты из текущего потока и перемещает положение в потоке, пока не будет заполнено |
| ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно считывает количество байтов из текущего потока, перемещает |
| ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Асинхронно считывает байты из текущего потока, перемещает положение в потоке до тех пор, пока не |
| Seek(Int64, SeekOrigin) |
Задает позицию в текущем потоке заданному значению. |
| SetLength(Int64) |
Задает длину текущего потока заданному значению. |
| ToArray() |
Записывает содержимое потока в массив байтов независимо от Position свойства. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| TryGetBuffer(ArraySegment<Byte>) |
Возвращает массив неподписанных байтов, из которых был создан этот поток. Возвращаемое значение указывает, выполнено ли преобразование успешно. |
| Write(Byte[], Int32, Int32) |
Записывает блок байтов в текущий поток с помощью данных, считываемых из буфера. |
| Write(ReadOnlySpan<Byte>) |
Записывает последовательность байтов, содержащихся в |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Асинхронно записывает последовательность байтов в текущий поток, перемещает текущую позицию в этом потоке по количеству записанных байтов и отслеживает запросы на отмену. |
| WriteAsync(Byte[], Int32, Int32) |
Асинхронно записывает последовательность байтов в текущий поток и перемещает текущую позицию в этом потоке по количеству записанных байтов. (Унаследовано от Stream) |
| WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Асинхронно записывает последовательность байтов, содержащихся в |
| WriteByte(Byte) |
Записывает байт в текущий поток в текущей позиции. |
| WriteTo(Stream) |
Записывает все содержимое этого потока памяти в другой поток. |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IDisposable.Dispose() |
Освобождает все ресурсы, используемые параметром Stream. (Унаследовано от Stream) |
Методы расширения
| Имя | Описание |
|---|---|
| AsInputStream(Stream) |
Преобразует управляемый поток в .NET для приложений Магазина Windows в входной поток в среде выполнения Windows. |
| AsOutputStream(Stream) |
Преобразует управляемый поток в .NET для приложений Магазина Windows в выходной поток в среде выполнения Windows. |
| AsRandomAccessStream(Stream) |
Преобразует указанный поток в поток случайного доступа. |
| ConfigureAwait(IAsyncDisposable, Boolean) |
Настраивает способ ожидания задач, возвращаемых из асинхронного удаления. |
| CopyToAsync(Stream, PipeWriter, CancellationToken) |
Асинхронно считывает байты из Stream указанных и записывает их в указанный PipeWriterмаркер отмены. |
| GetWindowsRuntimeBuffer(MemoryStream, Int32, Int32) |
Возвращает Windows. Интерфейс Storage.Streams.IBuffer, представляющий регион в памяти, который представляет указанный поток памяти. |
| GetWindowsRuntimeBuffer(MemoryStream) |
Возвращает Windows. Интерфейс Storage.Streams.IBuffer, представляющий ту же память, что и указанный поток памяти. |