MemoryStream Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Tworzy strumień, którego magazyn zapasowy to pamięć.
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
- Dziedziczenie
- Dziedziczenie
- Atrybuty
Przykłady
W poniższym przykładzie kodu pokazano, jak odczytywać i zapisywać dane przy użyciu pamięci jako magazynu kopii zapasowych.
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
Uwagi
Bieżąca pozycja strumienia to pozycja, w której może nastąpić kolejna operacja odczytu lub zapisu. Bieżące położenie można pobrać lub ustawić za pomocą Seek metody . Po utworzeniu MemoryStream nowego wystąpienia jest ustawione bieżące położenie na zero.
Note
Ten typ implementuje IDisposable interfejs, ale w rzeczywistości nie ma żadnych zasobów do usunięcia. Oznacza to, że usuwanie go przez bezpośrednie wywołanie Dispose() lub przy użyciu konstrukcji językowej, takiej jak using (w języku C#) lub Using (w Visual Basic) nie jest konieczne.
Strumienie pamięci utworzone z niepodpisaną tablicą bajtów zapewniają strumień danych niemożliwy do zmiany rozmiaru. W przypadku używania tablicy bajtów nie można dołączać ani zmniejszać strumienia, chociaż można modyfikować istniejącą zawartość w zależności od parametrów przekazanych do konstruktora. Puste strumienie pamięci można zmieniać rozmiar i można je zapisywać i odczytywać.
MemoryStream Jeśli obiekt zostanie dodany do pliku ResX lub pliku resources, wywołaj GetStream metodę w czasie wykonywania, aby go pobrać.
MemoryStream Jeśli obiekt jest serializowany do pliku zasobów, zostanie on faktycznie serializowany jako UnmanagedMemoryStream. To zachowanie zapewnia lepszą wydajność, a także możliwość bezpośredniego pobierania wskaźnika do danych bez konieczności przechodzenia przez Stream metody.
Konstruktory
| Nazwa | Opis |
|---|---|
| MemoryStream() |
Inicjuje nowe wystąpienie MemoryStream klasy z rozszerzalną pojemnością zainicjowaną do zera. |
| MemoryStream(Byte[], Boolean) |
Inicjuje nowe wystąpienie MemoryStream klasy niezróżnialnej na podstawie określonej tablicy bajtów z ustawioną właściwością CanWrite . |
| MemoryStream(Byte[], Int32, Int32, Boolean, Boolean) |
Inicjuje nowe wystąpienie MemoryStream klasy na podstawie określonego regionu tablicy bajtów z ustawioną właściwością oraz możliwość wywoływania CanWrite zestawu zgodnie z GetBuffer() określonymi. |
| MemoryStream(Byte[], Int32, Int32, Boolean) |
Inicjuje nowe, niezróżnialne wystąpienie MemoryStream klasy na podstawie określonego regionu tablicy bajtów z ustawioną właściwością CanWrite zgodnie z określoną wartością. |
| MemoryStream(Byte[], Int32, Int32) |
Inicjuje nowe niezróżnialne wystąpienie MemoryStream klasy na podstawie określonego regionu (indeksu) tablicy bajtów. |
| MemoryStream(Byte[]) |
Inicjuje nowe niezróżnialne wystąpienie MemoryStream klasy na podstawie określonej tablicy bajtów. |
| MemoryStream(Int32) |
Inicjuje nowe wystąpienie MemoryStream klasy z rozszerzalną pojemnością zainicjowaną zgodnie z określoną wartością. |
Właściwości
| Nazwa | Opis |
|---|---|
| CanRead |
Pobiera wartość wskazującą, czy bieżący strumień obsługuje odczyt. |
| CanSeek |
Pobiera wartość wskazującą, czy bieżący strumień obsługuje wyszukiwanie. |
| CanTimeout |
Pobiera wartość określającą, czy bieżący strumień może upłynął limit czasu. (Odziedziczone po Stream) |
| CanWrite |
Pobiera wartość wskazującą, czy bieżący strumień obsługuje zapisywanie. |
| Capacity |
Pobiera lub ustawia liczbę bajtów przydzielonych dla tego strumienia. |
| Length |
Pobiera długość strumienia w bajtach. |
| Position |
Pobiera lub ustawia bieżące położenie w strumieniu. |
| ReadTimeout |
Pobiera lub ustawia wartość w milisekundach, która określa, jak długo strumień będzie próbował odczytać przed upływem limitu czasu. (Odziedziczone po Stream) |
| WriteTimeout |
Pobiera lub ustawia wartość w milisekundach, która określa, jak długo strumień będzie próbował zapisać przed upływem limitu czasu. (Odziedziczone po Stream) |
Metody
| Nazwa | Opis |
|---|---|
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Rozpoczyna operację odczytu asynchronicznego. (Rozważ użycie ReadAsync(Byte[], Int32, Int32, CancellationToken) zamiast tego). |
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Rozpoczyna operację odczytu asynchronicznego. (Rozważ użycie ReadAsync(Byte[], Int32, Int32) zamiast tego). (Odziedziczone po Stream) |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Rozpoczyna asynchroniczną operację zapisu. (Rozważ użycie WriteAsync(Byte[], Int32, Int32, CancellationToken) zamiast tego). |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Rozpoczyna asynchroniczną operację zapisu. (Rozważ użycie WriteAsync(Byte[], Int32, Int32) zamiast tego). (Odziedziczone po Stream) |
| Close() |
Zamyka strumień do odczytu i zapisu. |
| Close() |
Zamyka bieżący strumień i zwalnia wszystkie zasoby (takie jak gniazda i dojścia plików) skojarzone z bieżącym strumieniem. Zamiast wywoływać tę metodę, upewnij się, że strumień jest prawidłowo usuwany. (Odziedziczone po Stream) |
| CopyTo(Stream, Int32) |
Odczytuje bajty z bieżącego strumienia pamięci i zapisuje je w innym strumieniu przy użyciu określonego rozmiaru buforu. |
| CopyTo(Stream, Int32) |
Odczytuje bajty z bieżącego strumienia i zapisuje je w innym strumieniu przy użyciu określonego rozmiaru buforu. Obie pozycje strumieni są zaawansowane przez liczbę skopiowanych bajtów. (Odziedziczone po Stream) |
| CopyTo(Stream) |
Odczytuje bajty z bieżącego strumienia i zapisuje je w innym strumieniu. Obie pozycje strumieni są zaawansowane przez liczbę skopiowanych bajtów. (Odziedziczone po Stream) |
| CopyToAsync(Stream, CancellationToken) |
Asynchronicznie odczytuje bajty z bieżącego strumienia i zapisuje je w innym strumieniu przy użyciu określonego tokenu anulowania. Obie pozycje strumieni są zaawansowane przez liczbę skopiowanych bajtów. (Odziedziczone po Stream) |
| CopyToAsync(Stream, Int32, CancellationToken) |
Asynchronicznie odczytuje wszystkie bajty z bieżącego strumienia i zapisuje je w innym strumieniu przy użyciu określonego rozmiaru buforu i tokenu anulowania. |
| CopyToAsync(Stream, Int32, CancellationToken) |
Asynchronicznie odczytuje bajty z bieżącego strumienia i zapisuje je w innym strumieniu przy użyciu określonego rozmiaru buforu i tokenu anulowania. Obie pozycje strumieni są zaawansowane przez liczbę skopiowanych bajtów. (Odziedziczone po Stream) |
| CopyToAsync(Stream, Int32) |
Asynchronicznie odczytuje bajty z bieżącego strumienia i zapisuje je w innym strumieniu przy użyciu określonego rozmiaru buforu. Obie pozycje strumieni są zaawansowane przez liczbę skopiowanych bajtów. (Odziedziczone po Stream) |
| CopyToAsync(Stream) |
Asynchronicznie odczytuje bajty z bieżącego strumienia i zapisuje je w innym strumieniu. Obie pozycje strumieni są zaawansowane przez liczbę skopiowanych bajtów. (Odziedziczone po Stream) |
| CreateObjRef(Type) |
Tworzy obiekt zawierający wszystkie istotne informacje wymagane do wygenerowania serwera proxy używanego do komunikowania się z obiektem zdalnym. (Odziedziczone po MarshalByRefObject) |
| CreateWaitHandle() |
Przestarzałe.
Przestarzałe.
Przestarzałe.
WaitHandle Przydziela obiekt. (Odziedziczone po Stream) |
| Dispose() |
Zwalnia wszystkie zasoby używane przez program Stream. (Odziedziczone po Stream) |
| Dispose(Boolean) |
Zwalnia niezarządzane zasoby używane przez klasę MemoryStream i opcjonalnie zwalnia zarządzane zasoby. |
| DisposeAsync() |
Asynchronicznie zwalnia niezarządzane zasoby używane przez program Stream. (Odziedziczone po Stream) |
| EndRead(IAsyncResult) |
Czeka na ukończenie oczekującego odczytu asynchronicznego. (Rozważ użycie ReadAsync(Byte[], Int32, Int32, CancellationToken) zamiast tego). |
| EndRead(IAsyncResult) |
Czeka na ukończenie oczekującego odczytu asynchronicznego. (Rozważ użycie ReadAsync(Byte[], Int32, Int32) zamiast tego). (Odziedziczone po Stream) |
| EndWrite(IAsyncResult) |
Kończy asynchroniczną operację zapisu. (Rozważ użycie WriteAsync(Byte[], Int32, Int32, CancellationToken) zamiast tego). |
| EndWrite(IAsyncResult) |
Kończy asynchroniczną operację zapisu. (Rozważ użycie WriteAsync(Byte[], Int32, Int32) zamiast tego). (Odziedziczone po Stream) |
| Equals(Object) |
Określa, czy określony obiekt jest równy bieżącemu obiektowi. (Odziedziczone po Object) |
| Flush() |
Zastępuje metodę tak, aby żadna Flush() akcja nie została wykonana. |
| FlushAsync() |
Asynchronicznie czyści wszystkie bufory dla tego strumienia i powoduje zapisanie wszystkich buforowanych danych na urządzeniu bazowym. (Odziedziczone po Stream) |
| FlushAsync(CancellationToken) |
Asynchronicznie czyści wszystkie bufory dla tego strumienia i monitoruje żądania anulowania. |
| GetBuffer() |
Zwraca tablicę niepodpisanych bajtów, z których utworzono ten strumień. |
| GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
| GetLifetimeService() |
Przestarzałe.
Pobiera bieżący obiekt usługi okresu istnienia, który kontroluje zasady okresu istnienia dla tego wystąpienia. (Odziedziczone po MarshalByRefObject) |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| InitializeLifetimeService() |
Przestarzałe.
Uzyskuje obiekt usługi okresu istnienia w celu kontrolowania zasad okresu istnienia dla tego wystąpienia. (Odziedziczone po MarshalByRefObject) |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
| MemberwiseClone(Boolean) |
Tworzy płytkią kopię bieżącego MarshalByRefObject obiektu. (Odziedziczone po MarshalByRefObject) |
| ObjectInvariant() |
Ten interfejs API obsługuje infrastrukturę produktu i nie jest przeznaczony do użycia bezpośrednio z poziomu kodu. Zapewnia obsługę elementu Contract. |
| ObjectInvariant() |
Przestarzałe.
Zapewnia obsługę elementu Contract. (Odziedziczone po Stream) |
| Read(Byte[], Int32, Int32) |
Odczytuje blok bajtów z bieżącego strumienia i zapisuje dane w buforze. |
| Read(Span<Byte>) |
Odczytuje sekwencję bajtów z bieżącego strumienia pamięci i rozwija pozycję w strumieniu pamięci przez liczbę odczytanych bajtów. |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Asynchronicznie odczytuje sekwencję bajtów z bieżącego strumienia, rozwija pozycję w strumieniu według liczby odczytanych bajtów i monitoruje żądania anulowania. |
| ReadAsync(Byte[], Int32, Int32) |
Asynchronicznie odczytuje sekwencję bajtów z bieżącego strumienia i rozwija pozycję w strumieniu według liczby odczytanych bajtów. (Odziedziczone po Stream) |
| ReadAsync(Memory<Byte>, CancellationToken) |
Asynchronicznie odczytuje sekwencję bajtów z bieżącego strumienia pamięci, zapisuje sekwencję w |
| ReadAtLeast(Span<Byte>, Int32, Boolean) |
Odczytuje co najmniej minimalną liczbę bajtów z bieżącego strumienia i rozwija pozycję w strumieniu według liczby odczytanych bajtów. (Odziedziczone po Stream) |
| ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Asynchronicznie odczytuje co najmniej minimalną liczbę bajtów z bieżącego strumienia, zwiększa pozycję w strumieniu przez liczbę odczytanych bajtów i monitoruje żądania anulowania. (Odziedziczone po Stream) |
| ReadByte() |
Odczytuje bajt z bieżącego strumienia. |
| ReadExactly(Byte[], Int32, Int32) |
Odczytuje |
| ReadExactly(Span<Byte>) |
Odczytuje bajty z bieżącego strumienia i przechodzi do momentu wypełnienia pozycji w strumieniu |
| ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Asynchronicznie odczytuje |
| ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Asynchronicznie odczytuje bajty z bieżącego strumienia, przechodzi pozycję w strumieniu do |
| Seek(Int64, SeekOrigin) |
Ustawia położenie w bieżącym strumieniu na określoną wartość. |
| SetLength(Int64) |
Ustawia długość bieżącego strumienia na określoną wartość. |
| ToArray() |
Zapisuje zawartość strumienia w tablicy bajtów, niezależnie od Position właściwości. |
| ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
| TryGetBuffer(ArraySegment<Byte>) |
Zwraca tablicę niepodpisanych bajtów, z których utworzono ten strumień. Wartość zwracana wskazuje, czy konwersja zakończyła się pomyślnie. |
| Write(Byte[], Int32, Int32) |
Zapisuje blok bajtów w bieżącym strumieniu przy użyciu danych odczytanych z buforu. |
| Write(ReadOnlySpan<Byte>) |
Zapisuje sekwencję bajtów zawartych w |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Asynchronicznie zapisuje sekwencję bajtów w bieżącym strumieniu, przechodzi bieżącą pozycję w tym strumieniu przez liczbę zapisanych bajtów i monitoruje żądania anulowania. |
| WriteAsync(Byte[], Int32, Int32) |
Asynchronicznie zapisuje sekwencję bajtów do bieżącego strumienia i przechodzi bieżącą pozycję w tym strumieniu przez liczbę zapisanych bajtów. (Odziedziczone po Stream) |
| WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Asynchronicznie zapisuje sekwencję bajtów zawartych w |
| WriteByte(Byte) |
Zapisuje bajt do bieżącego strumienia w bieżącym położeniu. |
| WriteTo(Stream) |
Zapisuje całą zawartość tego strumienia pamięci do innego strumienia. |
Jawne implementacje interfejsu
| Nazwa | Opis |
|---|---|
| IDisposable.Dispose() |
Zwalnia wszystkie zasoby używane przez program Stream. (Odziedziczone po Stream) |
Metody rozszerzania
| Nazwa | Opis |
|---|---|
| AsInputStream(Stream) |
Konwertuje strumień zarządzany na platformie .NET dla aplikacji ze Sklepu Windows na strumień wejściowy w środowisku uruchomieniowym systemu Windows. |
| AsOutputStream(Stream) |
Konwertuje strumień zarządzany na platformie .NET dla aplikacji ze Sklepu Windows na strumień wyjściowy w środowisku uruchomieniowym systemu Windows. |
| AsRandomAccessStream(Stream) |
Konwertuje określony strumień na strumień dostępu losowego. |
| ConfigureAwait(IAsyncDisposable, Boolean) |
Konfiguruje, w jaki sposób będą wykonywane oczekiwania na zadania zwrócone z asynchronicznego jednorazowego użytku. |
| CopyToAsync(Stream, PipeWriter, CancellationToken) |
Asynchronicznie odczytuje bajty z obiektu Stream i zapisuje je w określonym PipeWriterobiekcie przy użyciu tokenu anulowania. |
| GetWindowsRuntimeBuffer(MemoryStream, Int32, Int32) |
Zwraca Windows. Storage.Streams.IBuffer, który reprezentuje region w pamięci reprezentowanej przez określony strumień pamięci. |
| GetWindowsRuntimeBuffer(MemoryStream) |
Zwraca Windows. Storage.Streams.IBuffer, który reprezentuje tę samą pamięć co określony strumień pamięci. |