Udostępnij za pośrednictwem


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 obiektów FileStream do asynchronicznego kopiowania plików z jednego katalogu do innego katalogu. Klasa FileStream pochodzi z klasy Stream. Zwróć uwagę, że program obsługi zdarzeń Click dla 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ć strumienie. Zapisywanie to transfer danych ze struktury danych do strumienia.

  • Strumienie mogą obsługiwać wyszukiwanie. Wyszukiwanie odwołuje się do wykonywania zapytań i modyfikowania bieżącego położenia 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ą wyszukiwania.

Niektóre najczęściej używane strumienie dziedziczone z StreamFileStreami 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, używając właściwości CanRead, 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 metod Seek i SetLength oraz właściwości Position i Length, aby wykonywać zapytania i modyfikować bieżącą pozycję i długość strumienia.

Ten typ implementuje interfejs IDisposable. Po zakończeniu korzystania z typu należy usunąć go bezpośrednio lub pośrednio. Aby usunąć typ bezpośrednio, wywołaj metodę Dispose w bloku try/catch. Aby usunąć go pośrednio, należy użyć konstrukcji języka, 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.

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

Począwszy od programu .NET Framework 4.5, klasa Stream zawiera metody asynchroniczne upraszczające operacje asynchroniczne. Metoda async zawiera Async w nazwie, na przykład 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 z słowami kluczowymi async i await w języku Visual Basic i C#.

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

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

Uwagi dotyczące implementowania

Podczas implementowania klasy pochodnej Streamnależy podać implementacje dla metod Read(Byte[], Int32, Int32) i Write(Byte[], Int32, Int32). Metody asynchroniczne ReadAsync(Byte[], Int32, Int32), WriteAsync(Byte[], Int32, Int32)i CopyToAsync(Stream) używają metod synchronicznych Read(Byte[], Int32, Int32) i Write(Byte[], Int32, Int32) w ich implementacjach. W związku z tym implementacje Read(Byte[], Int32, Int32) i Write(Byte[], Int32, Int32) będą działać prawidłowo z metodami asynchronicznymi. Domyślne implementacje ReadByte() i WriteByte(Byte) tworzą nową tablicę bajtów z jednym elementem, a następnie wywołają implementacje Read(Byte[], Int32, Int32) i Write(Byte[], Int32, Int32). W przypadku Streamzaleca się zastąpienie tych metod w celu uzyskania dostępu do wewnętrznego buforu, jeśli taki jest, w celu uzyskania znacznie lepszej wydajności. Należy również udostępnić implementacje CanRead, CanSeek, CanWrite, Flush(), Length, Position, Seek(Int64, SeekOrigin)i SetLength(Int64).

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

Konstruktory

Stream()

Inicjuje nowe wystąpienie klasy Stream.

Pola

Null

Stream bez 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

Po zastąpieniu w klasie pochodnej pobiera długość w bajtach strumienia.

Position

Gdy przesłonięta w klasie pochodnej, 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ń będzie próbował zapisać 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 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. 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.

Przydziela obiekt WaitHandle.

Dispose()

Zwalnia wszystkie zasoby używane przez Stream.

Dispose(Boolean)

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

DisposeAsync()

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

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 określony obiekt jest równy bieżącemu obiektowi.

(Odziedziczone po Object)
Flush()

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

FlushAsync()

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

FlushAsync(CancellationToken)

Asynchronicznie czyści wszystkie 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()

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 obiektu MarshalByRefObject.

(Odziedziczone po MarshalByRefObject)
ObjectInvariant()
Przestarzałe.

Zapewnia obsługę Contract.

Read(Byte[], Int32, Int32)

Gdy przesłonięta w klasie pochodnej, odczytuje sekwencję bajtów z bieżącego strumienia i przechodzi pozycję w strumieniu według liczby odczytanych bajtów.

Read(Span<Byte>)

Gdy przesłonięta w klasie pochodnej, odczytuje sekwencję bajtów z bieżącego strumienia i przechodzi 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 przez liczbę odczytanych bajtów i monitoruje żądania anulowania.

ReadByte()

Odczytuje bajt ze strumienia i rozwija pozycję w strumieniu według jednego bajtu lub zwraca -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 przesuwa pozycję w strumieniu do momentu wypełnienia buffer.

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, przechodzi pozycję w strumieniu do momentu wypełnienia buffer i monitoruje żądania anulowania.

Seek(Int64, SeekOrigin)

Po przesłonięciu w klasie pochodnej ustawia pozycję w bieżącym strumieniu.

SetLength(Int64)

Po zastąpieniu w klasie pochodnej ustawia długość bieżącego strumienia.

Synchronized(Stream)

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

ToString()

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

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

Weryfikuje argumenty dostarczane do odczytywania i zapisywania metod w Stream.

ValidateCopyToArguments(Stream, Int32)

Sprawdza poprawność argumentów dostarczonych do metod CopyTo(Stream, Int32) lub CopyToAsync(Stream, Int32, CancellationToken).

Write(Byte[], Int32, Int32)

Po zastąpieniu w klasie pochodnej zapisuje sekwencję bajtów do bieżącego strumienia i przechodzi 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 przechodzi 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 przechodzi bieżącą pozycję w tym strumieniu przez liczbę zapisanych bajtó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(ReadOnlyMemory<Byte>, 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.

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 wszystkie zasoby używane przez Stream.

Metody rozszerzania

CopyToAsync(Stream, PipeWriter, CancellationToken)

Asynchronicznie odczytuje bajty z Stream i zapisuje je w określonym PipeWriterprzy użyciu tokenu anulowania.

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.

Dotyczy

Zobacz też