Stream Klasa

Definicja

Udostępnia 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 podstawowych urządzeń.

Strumienie obejmują trzy podstawowe operacje:

  • Strumienie można odczytywać. Odczyt to transfer danych ze strumienia do struktury danych, na przykład tablica bajtów.

  • Możesz zapisywać strumienie. Zapisywanie to transfer danych ze struktury danych do strumienia.

  • Strumienie mogą obsługiwać wyszukiwanie. Wyszukiwanie odnosi się do wykonywania zapytań i modyfikowania bieżącej pozycji w strumieniu. Funkcja wyszukiwania zależy od rodzaju magazynu zaplecza, który ma strumień. Na przykład strumienie sieciowe nie mają ujednoliconej koncepcji bieżącej pozycji, dlatego zazwyczaj nie obsługują wyszukiwania.

Niektóre z najczęściej używanych strumieni dziedziczone z Stream klasy 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 wykonać zapytanie dotyczące strumienia pod kątem jego możliwości przy użyciu CanReadwłaściwości , CanWritei CanSeek klasy Stream .

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 i Length do wykonywania zapytań oraz modyfikowania bieżącej pozycji i długości strumienia.

Ten typ implementuje IDisposable interfejs. Po zakończeniu korzystania z typu należy go usunąć bezpośrednio lub pośrednio. Aby usunąć typ bezpośrednio, wywołaj metodę Disposetry/catch w bloku. Aby usunąć go pośrednio, użyj 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 protokół IDisposable) w temacie interfejsu IDisposable .

Stream Usuwanie obiektu opróżnia wszystkie buforowane dane i zasadniczo wywołuje metodę Flush . Dispose zwalnia również zasoby systemu operacyjnego, takie jak uchwyty 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, aby uprościć operacje asynchroniczne. Metoda asynchronizowa 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 ze słowami kluczowymi async i await w Visual Basic i C#.

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

Niektóre implementacje strumienia wykonują lokalne buforowanie bazowych danych w celu zwiększenia wydajności. W przypadku takich strumieni można użyć Flush metody lub FlushAsync , aby wyczyścić wszystkie 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 zaplecza (znanego również jako zasobnik bitowy), użyj Null pola, aby pobrać wystąpienie strumienia przeznaczonego do tego celu.

Uwagi dotyczące implementowania

Podczas implementowania klasy pochodnej klasy Stream, 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) metod Write(Byte[], Int32, Int32) asynchronicznych i będą działać poprawnie. Domyślne implementacje ReadByte() i WriteByte(Byte) utwórz nową tablicę bajtów z jednym elementem, a następnie wywołaj implementacje elementu Read(Byte[], Int32, Int32) i Write(Byte[], Int32, Int32). W przypadku korzystania z Streamprogramu zalecamy zastąpienie tych metod w celu uzyskania dostępu do buforu wewnętrznego, jeśli masz go, aby uzyskać znacznie lepszą wydajność. Należy również podać implementacje CanRead, , CanSeekLengthFlush()PositionCanWriteSeek(Int64, SeekOrigin)i .SetLength(Int64)

Zamiast tego nie przesłoń Close() metody , 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 przesłonięciu 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 przesłonięciu 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 upływem limitu czasu.

WriteTimeout

Pobiera lub ustawia wartość w milisekundach, która określa, jak długo strumień podejmie próbę zapisania przed upływem limitu czasu.

Metody

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

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

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

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

Close()

Zamyka bieżący strumień i zwalnia wszystkie zasoby (takie jak gniazda i uchwyty 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. Obie 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. Obie pozycje strumieni są zaawansowane przez liczbę skopiowanych bajtów.

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.

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()
Przestarzałe.
Przestarzałe.
Przestarzałe.

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()
Przestarzałe.

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

(Odziedziczone po MarshalByRefObject)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
InitializeLifetimeService()
Przestarzałe.

Uzyskuje obiekt usługi okresu istnienia, aby kontrolować zasady 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()
Przestarzałe.

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 według liczby 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(Memory<Byte>, CancellationToken)

Asynchronicznie odczytuje sekwencję bajtów z bieżącego strumienia, rozwija pozycję w strumieniu według liczby odczytanych bajtów i monitoruje żądania anulowania.

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.

ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Asynchronicznie odczytuje co najmniej minimalną liczbę bajtów z bieżącego strumienia, zwiększa pozycję w strumieniu według liczby odczytanych bajtów i monitoruje żądania anulowania.

ReadByte()

Odczytuje bajt ze strumienia i rozwija pozycję w strumieniu według jednego bajtu lub zwraca wartość -1, jeśli na końcu strumienia.

ReadExactly(Byte[], Int32, Int32)

Odczytuje count liczbę bajtów z bieżącego strumienia i rozwija pozycję w strumieniu.

ReadExactly(Span<Byte>)

Odczytuje bajty z bieżącego strumienia i rozwija pozycję w strumieniu do momentu buffer wypełnienia.

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

Asynchronicznie odczytuje count liczbę bajtów z bieżącego strumienia, zwiększa pozycję w strumieniu i monitoruje żądania anulowania.

ReadExactlyAsync(Memory<Byte>, CancellationToken)

Asynchronicznie odczytuje bajty z bieżącego strumienia, przesuwa pozycję w strumieniu do buffer momentu wypełnienia i monitoruje żądania anulowania.

Seek(Int64, SeekOrigin)

Po przesłonięciu 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)

Gdy zastąpisz klasę pochodną, zapisuje sekwencję bajtów do bieżącego strumienia i rozwija bieżącą pozycję w tym strumieniu według liczby zapisanych bajtów.

Write(ReadOnlySpan<Byte>)

Gdy zastąpisz klasę pochodną, zapisuje sekwencję bajtów do bieżącego strumienia i rozwija bieżącą pozycję w tym strumieniu według liczby 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 rozwija pozycję w strumieniu według jednego bajtu.

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 ze Sklepu Windows na strumień wejściowy w środowisko wykonawcze systemu Windows.

AsOutputStream(Stream)

Konwertuje strumień zarządzany na platformie .NET dla aplikacji ze Sklepu Windows 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 asynchronicznego jednorazowego wykonania.

Dotyczy

Zobacz też