Stream Klasa

Definicja

Zapewnia ogólny widok sekwencji bajtów. Jest to abstrakcyjna klasa.

public ref class Stream abstract : IDisposable
public ref class Stream abstract : MarshalByRefObject, IAsyncDisposable, IDisposable
public ref class Stream abstract : MarshalByRefObject, IDisposable
public abstract class Stream : IDisposable
public abstract class Stream : MarshalByRefObject, IAsyncDisposable, IDisposable
public abstract class Stream : MarshalByRefObject, IDisposable
[System.Serializable]
public abstract class Stream : MarshalByRefObject, IDisposable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Stream : MarshalByRefObject, IDisposable
type Stream = class
    interface IDisposable
type Stream = class
    inherit MarshalByRefObject
    interface IAsyncDisposable
    interface IDisposable
type Stream = class
    inherit MarshalByRefObject
    interface IDisposable
[<System.Serializable>]
type Stream = class
    inherit MarshalByRefObject
    interface IDisposable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Stream = class
    inherit MarshalByRefObject
    interface IDisposable
Public MustInherit Class Stream
Implements IDisposable
Public MustInherit Class Stream
Inherits MarshalByRefObject
Implements IAsyncDisposable, IDisposable
Public MustInherit Class Stream
Inherits MarshalByRefObject
Implements IDisposable
Dziedziczenie
Stream
Dziedziczenie
Pochodne
Atrybuty
Implementuje

Przykłady

W poniższym przykładzie pokazano, jak używać dwóch FileStream obiektów do asynchronicznego kopiowania plików z jednego katalogu do innego katalogu. Klasa FileStream pochodzi z Stream klasy . Program obsługi zdarzeń Click kontrolki Button jest oznaczony modyfikatorem async, ponieważ wywołuje metodę asynchroniczną.

using System;
using System.Threading.Tasks;
using System.Windows;
using System.IO;

namespace WpfApplication
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            string StartDirectory = @"c:\Users\exampleuser\start";
            string EndDirectory = @"c:\Users\exampleuser\end";

            foreach (string filename in Directory.EnumerateFiles(StartDirectory))
            {
                using (FileStream SourceStream = File.Open(filename, FileMode.Open))
                {
                    using (FileStream DestinationStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf('\\'))))
                    {
                        await SourceStream.CopyToAsync(DestinationStream);
                    }
                }
            }
        }
    }
}
Imports System.IO

Class MainWindow

    Private Async Sub Button_Click(sender As Object, e As RoutedEventArgs)
        Dim StartDirectory As String = "c:\Users\exampleuser\start"
        Dim EndDirectory As String = "c:\Users\exampleuser\end"

        For Each filename As String In Directory.EnumerateFiles(StartDirectory)
            Using SourceStream As FileStream = File.Open(filename, FileMode.Open)
                Using DestinationStream As FileStream = File.Create(EndDirectory + filename.Substring(filename.LastIndexOf("\"c)))
                    Await SourceStream.CopyToAsync(DestinationStream)
                End Using

            End Using
        Next
    End Sub

End Class

Uwagi

Stream jest abstrakcyjną klasą bazową wszystkich strumieni. Strumień to abstrakcja sekwencji bajtów, takich jak plik, urządzenie wejściowe/wyjściowe, potok komunikacji między procesami lub gniazdo TCP/IP. Klasa Stream i jej klasy pochodne zapewniają ogólny widok tych różnych typów danych wejściowych i wyjściowych oraz izolować programistę od konkretnych szczegółów systemu operacyjnego i urządzeń bazowych.

Strumienie obejmują trzy podstawowe operacje:

  • Możesz odczytywać ze strumieni. Odczyt to transfer danych ze strumienia do struktury danych, takiej jak tablica bajtów.

  • Możesz zapisywać dane w strumieniach. Zapisywanie to transfer danych ze struktury danych do strumienia.

  • Strumienie może wspierać poszukiwania. Wyszukiwanie odwołuje się do wykonywania zapytań i modyfikowania bieżącej pozycji w strumieniu. Funkcja wyszukiwania zależy od rodzaju magazynu zapasowego, który ma strumień. Na przykład strumienie sieciowe nie mają ujednoliconej koncepcji bieżącej pozycji, dlatego zazwyczaj nie obsługują poszukiwania.

Niektóre z najczęściej używanych strumieni dziedziczone z Stream elementów to FileStream, i MemoryStream.

W zależności od bazowego źródła danych lub repozytorium strumienie mogą obsługiwać tylko niektóre z tych możliwości. Możesz odpytować strumień pod kątem jego możliwości przy użyciu CanReadwłaściwości Stream , CanWritei CanSeek klasy .

Metody Read i Write odczytują i zapisują dane w różnych formatach. W przypadku strumieni, które obsługują wyszukiwanie, użyj Seek metod i SetLength oraz Position właściwości , Length aby wykonywać zapytania i modyfikować bieżącą pozycję i długość strumienia.

Ten typ implementuje IDisposable interfejs. Po zakończeniu korzystania z typu należy usunąć go bezpośrednio lub pośrednio. Aby bezpośrednio usunąć typ, wywołaj jego Dispose metodę try/catch w bloku. Aby usunąć go pośrednio, należy użyć konstrukcji językowej, takiej jak using (w języku C#) lub Using (w Visual Basic). Aby uzyskać więcej informacji, zobacz sekcję "Using an Object that Implements IDisposable" (Używanie obiektu implementujące interfejs IDisposable) w temacie interfejsu IDisposable .

Odsuwanie Stream obiektu opróżnia wszystkie buforowane dane i zasadniczo wywołuje metodę Flush . Dispose Zwalnia również zasoby systemu operacyjnego, takie jak dojścia do plików, połączenia sieciowe lub pamięć używana do buforowania wewnętrznego. Klasa BufferedStream zapewnia możliwość zawijania buforowanego strumienia wokół innego strumienia w celu zwiększenia wydajności odczytu i zapisu.

Począwszy od .NET Framework 4.5, Stream klasa zawiera metody asynchroniczne upraszczające operacje asynchroniczne. Metoda asynchroniczna zawiera Async nazwę, taką jak ReadAsync, WriteAsync, CopyToAsynci FlushAsync. Te metody umożliwiają wykonywanie operacji we/wy intensywnie korzystających z zasobów bez blokowania głównego wątku. Ta kwestia wydajności jest szczególnie ważna w aplikacji ze sklepu Windows 8.x lub aplikacji klasycznej, w której czasochłonna operacja strumienia może zablokować wątek interfejsu użytkownika i sprawić, że aplikacja będzie wyświetlana tak, jakby nie działała. Metody asynchroniczne są używane w połączeniu async ze słowami kluczowymi i await w Visual Basic i C#.

W przypadku użycia w aplikacji Stream Windows 8.x Store dostępne są dwie metody rozszerzenia: AsInputStream i AsOutputStream. Te metody konwertują Stream obiekt na strumień w środowisko wykonawcze systemu Windows. Strumień w środowisko wykonawcze systemu Windows można również przekonwertować na Stream obiekt przy użyciu AsStreamForRead metod i AsStreamForWrite . Aby uzyskać więcej informacji, zobacz How to: Convert Between .NET Framework Strumienie and środowisko wykonawcze systemu Windows Strumienie (Jak konwertować między .NET Framework Strumienie i środowisko wykonawcze systemu Windows Strumienie)

Niektóre implementacje strumieni wykonują lokalne buforowanie danych bazowych w celu zwiększenia wydajności. W przypadku takich strumieni można użyć Flush metody lub FlushAsync , aby wyczyścić wszelkie bufory wewnętrzne i upewnić się, że wszystkie dane zostały zapisane w bazowym źródle danych lub repozytorium.

Jeśli potrzebujesz strumienia bez magazynu zapasowego (nazywanego również zasobnikiem bitowym), użyj Null pola, aby pobrać wystąpienie strumienia przeznaczonego do tego celu.

Uwagi dotyczące implementowania

Podczas implementowania klasy pochodnej Streamklasy programu należy podać implementacje dla Read(Byte[], Int32, Int32) metod i Write(Byte[], Int32, Int32) . Metody ReadAsync(Byte[], Int32, Int32)asynchroniczne , WriteAsync(Byte[], Int32, Int32)i CopyToAsync(Stream) używają metod Read(Byte[], Int32, Int32) synchronicznych i Write(Byte[], Int32, Int32) w ich implementacjach. W związku z tym implementacje Read(Byte[], Int32, Int32) elementów i Write(Byte[], Int32, Int32) będą działać prawidłowo z metodami asynchronicznymi. Domyślne implementacje ReadByte() i WriteByte(Byte) tworzenie nowej tablicy bajtów z jednym elementem, a następnie wywoływanie implementacji elementów Read(Byte[], Int32, Int32) i Write(Byte[], Int32, Int32). Jeśli pochodzisz z Streamklasy , zalecamy zastąpienie tych metod w celu uzyskania dostępu do buforu wewnętrznego, jeśli taki jest, w celu uzyskania znacznie lepszej wydajności. Należy również podać implementacje CanReadelementów , , CanSeek, Flush()CanWrite, Length, Position, Seek(Int64, SeekOrigin), i SetLength(Int64).

Nie przesłaniaj Close() metody , zamiast tego umieść całą logikę Stream oczyszczania w metodzie Dispose(Boolean) . Aby uzyskać więcej informacji, zobacz Implementowanie metody Dispose.

Konstruktory

Stream()

Inicjuje nowe wystąpienie klasy Stream.

Pola

Null

Bez Stream magazynu zapasowego.

Właściwości

CanRead

Po zastąpieniu w klasie pochodnej pobiera wartość wskazującą, czy bieżący strumień obsługuje odczyt.

CanSeek

Po przesłonięciu w klasie pochodnej 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.

CanWrite

Po zastąpieniu w klasie pochodnej pobiera wartość wskazującą, czy bieżący strumień obsługuje zapisywanie.

Length

W przypadku zastąpienia w klasie pochodnej pobiera długość w bajtach strumienia.

Position

Gdy zastąpisz klasę pochodną, pobiera lub ustawia pozycję w bieżącym strumieniu.

ReadTimeout

Pobiera lub ustawia wartość w milisekundach, która określa, jak długo strumień będzie próbował odczytać przed przekroczeniem limitu czasu.

WriteTimeout

Pobiera lub ustawia wartość w milisekundach, która określa, jak długo strumień będzie próbował zapisać przed przekroczeniem limitu czasu.

Metody

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

Rozpoczyna asynchroniczną operację odczytu. (Rozważ użycie ReadAsync(Byte[], Int32, Int32) zamiast tego).

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

Rozpoczyna asynchroniczną operację zapisu. (Rozważ użycie WriteAsync(Byte[], Int32, Int32) zamiast tego).

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.

CopyTo(Stream)

Odczytuje bajty z bieżącego strumienia i zapisuje je w innym strumieniu. Oba pozycje strumieni są zaawansowane przez liczbę skopiowanych bajtów.

CopyTo(Stream, Int32)

Odczytuje bajty z bieżącego strumienia i zapisuje je w innym strumieniu przy użyciu określonego rozmiaru buforu. Oba pozycje strumieni są zaawansowane przez liczbę skopiowanych bajtów.

CopyToAsync(Stream)

Asynchronicznie odczytuje bajty z bieżącego strumienia i zapisuje je w innym strumieniu. Oba pozycje strumieni są zaawansowane przez liczbę skopiowanych bajtów.

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.

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.

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.

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()
Nieaktualne.
Nieaktualne.
Nieaktualne.

WaitHandle Przydziela obiekt.

Dispose()

Zwalnia wszelkie zasoby używane przez element Stream.

Dispose(Boolean)

Zwalnia zasoby niezarządzane używane przez element Stream i opcjonalnie zwalnia zasoby zarządzane.

DisposeAsync()

Asynchronicznie zwalnia niezarządzane zasoby używane przez Streamprogram .

EndRead(IAsyncResult)

Czeka na ukończenie oczekującego odczytu asynchronicznego. (Rozważ użycie ReadAsync(Byte[], Int32, Int32) zamiast tego).

EndWrite(IAsyncResult)

Kończy asynchroniczną operację zapisu. (Rozważ użycie WriteAsync(Byte[], Int32, Int32) zamiast tego).

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
Flush()

Po przesłonięciu w klasie pochodnej wszystkie bufory dla tego strumienia powoduje zapisanie wszystkich buforowanych danych na urządzeniu bazowym.

FlushAsync()

Asynchronicznie czyści wszystkie bufory dla tego strumienia i powoduje zapisanie wszystkich buforowanych danych na urządzeniu bazowym.

FlushAsync(CancellationToken)

Asynchronicznie czyści wszystkie bufory dla tego strumienia, powoduje zapisanie wszystkich buforowanych danych na urządzeniu źródłowym i monitorowanie żądań anulowania.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetLifetimeService()
Nieaktualne.

Pobiera bieżący obiekt usługi okresu istnienia, który kontroluje zasady okresu istnienia dla tego wystąpienia.

(Odziedziczone po MarshalByRefObject)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
InitializeLifetimeService()
Nieaktualne.

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 Objectelementu .

(Odziedziczone po Object)
MemberwiseClone(Boolean)

Tworzy płytkią kopię bieżącego MarshalByRefObject obiektu.

(Odziedziczone po MarshalByRefObject)
ObjectInvariant()
Nieaktualne.

Zapewnia obsługę programu Contract.

Read(Byte[], Int32, Int32)

Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i rozwija pozycję w strumieniu według liczby odczytanych bajtów.

Read(Span<Byte>)

Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i rozwija pozycję w strumieniu według liczby odczytanych bajtów.

ReadAsync(Byte[], Int32, Int32)

Asynchronicznie odczytuje sekwencję bajtów z bieżącego strumienia i rozwija pozycję w strumieniu przez liczbę odczytanych bajtów.

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

Asynchronicznie odczytuje sekwencję bajtów z bieżącego strumienia, przesuwa pozycję w strumieniu o liczbę odczytanych bajtów i monitoruje żądania anulowania.

ReadAsync(Memory<Byte>, CancellationToken)

Asynchronicznie odczytuje sekwencję bajtów z bieżącego strumienia, przesuwa pozycję w strumieniu o liczbę odczytanych bajtów i monitoruje żądania anulowania.

ReadByte()

Odczytuje bajt ze strumienia i przesuwa pozycję w strumieniu o jeden bajt lub zwraca wartość -1, jeśli na końcu strumienia.

Seek(Int64, SeekOrigin)

Po zastąpieniu w klasie pochodnej ustawia pozycję w bieżącym strumieniu.

SetLength(Int64)

Po przesłonięciu w klasie pochodnej ustawia długość bieżącego strumienia.

Synchronized(Stream)

Tworzy otokę bezpieczną wątkowo (zsynchronizowaną) wokół określonego Stream obiektu.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
ValidateBufferArguments(Byte[], Int32, Int32)

Weryfikuje argumenty udostępniane do odczytywania i zapisywania metod w systemie Stream.

ValidateCopyToArguments(Stream, Int32)

Weryfikuje argumenty dostarczone do CopyTo(Stream, Int32) metod lub CopyToAsync(Stream, Int32, CancellationToken) .

Write(Byte[], Int32, Int32)

Po zastąpieniu w klasie pochodnej zapisuje sekwencję bajtów do bieżącego strumienia i rozwija bieżącą pozycję w tym strumieniu przez liczbę zapisanych bajtów.

Write(ReadOnlySpan<Byte>)

Po zastąpieniu w klasie pochodnej zapisuje sekwencję bajtów do bieżącego strumienia i rozwija bieżącą pozycję w tym strumieniu przez liczbę zapisanych bajtów.

WriteAsync(Byte[], Int32, Int32)

Asynchronicznie zapisuje sekwencję bajtów do bieżącego strumienia i rozwija bieżącą pozycję w tym strumieniu przez liczbę zapisanych bajtów.

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

Asynchronicznie zapisuje sekwencję bajtów do bieżącego strumienia, przechodzi bieżącą pozycję w tym strumieniu przez liczbę zapisanych bajtów i monitoruje żądania anulowania.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchronicznie zapisuje sekwencję bajtów do bieżącego strumienia, przechodzi bieżącą pozycję w tym strumieniu przez liczbę zapisanych bajtów i monitoruje żądania anulowania.

WriteByte(Byte)

Zapisuje bajt do bieżącej pozycji w strumieniu i przesuwa pozycję w strumieniu o jeden bajt.

Jawne implementacje interfejsu

IDisposable.Dispose()

Zwalnia wszelkie zasoby używane przez element Stream.

Metody rozszerzania

AsInputStream(Stream)

Konwertuje strumień zarządzany na platformie .NET dla aplikacji Windows Store na strumień wejściowy w środowisko wykonawcze systemu Windows.

AsOutputStream(Stream)

Konwertuje strumień zarządzany na platformie .NET dla aplikacji ze sklepu Windows Store na strumień wyjściowy w środowisko wykonawcze systemu Windows.

AsRandomAccessStream(Stream)

Konwertuje określony strumień na strumień o dostępie losowym.

ConfigureAwait(IAsyncDisposable, Boolean)

Konfiguruje sposób oczekiwania na zadania zwracane z jednorazowego użytku asynchronicznego.

Dotyczy

Zobacz też