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 namespace System;
using namespace System::IO;
using namespace System::Text;
int main()
{
int count;
array<Byte>^byteArray;
array<Char>^charArray;
UnicodeEncoding^ uniEncoding = gcnew UnicodeEncoding;
// Create the data to write to the stream.
array<Byte>^firstString = uniEncoding->GetBytes( "Invalid file path characters are: " );
array<Byte>^secondString = uniEncoding->GetBytes( Path::InvalidPathChars );
MemoryStream^ memStream = gcnew 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++ ] );
}
// 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 stream position to the beginning of the stream.
memStream->Seek( 0, SeekOrigin::Begin );
// Read the first 20 bytes from the stream.
byteArray = gcnew array<Byte>(memStream->Length);
count = memStream->Read( byteArray, 0, 20 );
// Read the remaining bytes, byte by byte.
while ( count < memStream->Length )
{
byteArray[ count++ ] = Convert::ToByte( memStream->ReadByte() );
}
// Decode the Byte array into a Char array
// and write it to the console.
charArray = gcnew array<Char>(uniEncoding->GetCharCount( byteArray, 0, count ));
uniEncoding->GetDecoder()->GetChars( byteArray, 0, count, charArray, 0 );
Console::WriteLine( charArray );
}
finally
{
memStream->Close();
}
}
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 позиции присваивается нулевое значение.
Примечание
Этот тип реализует интерфейс IDisposable, но никакие ресурсы не удаляет. Это означает, что вам не обязательно его удалять, вызывая непосредственно Dispose() или используя такие языковые конструкции, как using
(C#) или Using
(Visual Basic).
Потоки памяти, созданные с массивом байтов без знака, предоставляют поток данных без изменения размера. При использовании массива байтов нельзя ни добавить, ни сжать поток, хотя вы можете изменить существующее содержимое в зависимости от параметров, переданных в конструктор. Пустые потоки памяти можно изменять, и их можно записывать и считывать из.
MemoryStream Если объект добавляется в RESX-файл или RESOURCES-файл, вызовите GetStream метод во время выполнения, чтобы получить его.
MemoryStream Если объект сериализуется в файл ресурсов, он фактически будет сериализован как UnmanagedMemoryStream. Такое поведение обеспечивает более высокую производительность, а также возможность получения указателя на данные напрямую без использования Stream методов.
Конструкторы
MemoryStream() |
Инициализирует новый экземпляр класса MemoryStream расширяемой производительностью, инициализированной нулевым значением. |
MemoryStream(Byte[]) |
Инициализирует новый неизменяемый экземпляр класса MemoryStream на основе указанного массива байтов. |
MemoryStream(Byte[], Boolean) |
Инициализирует новый неизменяемый экземпляр класса MemoryStream на основе указанного массива байтов с помощью указанного значения свойства CanWrite. |
MemoryStream(Byte[], Int32, Int32) |
Инициализирует новый неизменяемый экземпляр класса MemoryStream на основе указанной области (индекса) массива байтов. |
MemoryStream(Byte[], Int32, Int32, Boolean) |
Инициализирует новый неизменяемый экземпляр класса MemoryStream на основе указанной области массива байтов с помощью указанного значения свойства CanWrite. |
MemoryStream(Byte[], Int32, Int32, Boolean, Boolean) |
Инициализирует новый экземпляр класса MemoryStream на основе указанной области массива байтов с помощью указанного значения свойства CanWrite и возможности вызова GetBuffer() с указанным значением. |
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) |
Считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyTo(Stream, Int32) |
Считывает байты из текущего потока в памяти и записывает их в другой поток, используя указанный размер буфера. |
CopyTo(Stream, Int32) |
Считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream, CancellationToken) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный токен отмены. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream, Int32) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CopyToAsync(Stream, Int32, CancellationToken) |
Асинхронно считывает все байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и токен отмены. |
CopyToAsync(Stream, Int32, CancellationToken) |
Асинхронно считывает байты из текущего потока и записывает их в другой поток, используя указанный размер буфера и токен отмены. Обе позиции потоков расширены по количеству скопированных байтов. (Унаследовано от Stream) |
CreateObjRef(Type) |
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
CreateWaitHandle() |
Устаревшие..
Устаревшие..
Устаревшие..
Выделяет объект WaitHandle. (Унаследовано от Stream) |
Dispose() |
Освобождает все ресурсы, занятые модулем Stream. (Унаследовано от Stream) |
Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые классом MemoryStream (при необходимости освобождает и управляемые ресурсы). |
Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые объектом Stream, а при необходимости освобождает также управляемые ресурсы. (Унаследовано от Stream) |
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) |
Асинхронно очищает все буферы для этого потока и отслеживает запросы отмены. |
FlushAsync(CancellationToken) |
Асинхронно очищает все буферы данного потока, вызывает запись буферизованных данных в базовое устройство и отслеживает запросы отмены. (Унаследовано от Stream) |
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>) |
Считывает последовательность байтов из текущего потока в памяти и перемещает позицию внутри потока в памяти на число считанных байтов. |
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() |
Считывает байт из текущего потока. |
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>) |
Записывает последовательность байтов, содержащихся в |
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) |
Записывает байт в текущее положение текущего потока. |
WriteTo(Stream) |
Записывает все содержимое данного потока памяти в другой поток. |
Явные реализации интерфейса
IDisposable.Dispose() |
Освобождает все ресурсы, занятые модулем Stream. (Унаследовано от Stream) |
Методы расширения
CopyToAsync(Stream, PipeWriter, CancellationToken) |
Асинхронно считывает байты из Stream и записывает их в указанный PipeWriter, используя токен отмены. |
AsInputStream(Stream) |
Преобразует управляемый поток в .NET для приложений Магазина Windows во входной поток в среде выполнения Windows. |
AsOutputStream(Stream) |
Преобразует управляемый поток в .NET для приложений Магазина Windows в поток вывода в среде выполнения Windows. |
AsRandomAccessStream(Stream) |
Преобразует заданный поток в поток прямого доступа. |
GetWindowsRuntimeBuffer(MemoryStream) |
Возвращает интерфейс Windows.Storage.Streams.IBuffer, который представляет ту же память, что и указанный поток памяти. |
GetWindowsRuntimeBuffer(MemoryStream, Int32, Int32) |
Возвращает интерфейс Windows.Storage.Streams.IBuffer, представляющий область в памяти, которую представляет указанный поток памяти. |
ConfigureAwait(IAsyncDisposable, Boolean) |
Настраивает способ выполнения ожиданий для задач, возвращаемых из асинхронного высвобождаемого объекта. |
Применяется к
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по