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.

  • Usługa Streams może obsługiwać wyszukiwanie. 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, użyj 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 .

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 ze słowami async kluczowymi i await w języku 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 Streams and środowisko wykonawcze systemu Windows Streams (Jak konwertować strumienie .NET Framework i strumienie środowisko wykonawcze systemu Windows)

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

A 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

Gdy przesłonięta w klasie pochodnej, pobiera długość w bajtach strumienia.

Position

Po zastąpieniu 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 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. Oba 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. Oba 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. Oba 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 program Stream.

EndRead(IAsyncResult)

Oczekuje 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 i 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 przesuwa pozycję w strumieniu przez liczbę odczytanych bajtów.

Read(Span<Byte>)

Po zastąpieniu w klasie pochodnej odczytuje sekwencję bajtów z bieżącego strumienia i przesuwa pozycję w strumieniu przez liczbę 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.

ReadAtLeast(Span<Byte>, Int32, Boolean)

Odczytuje co najmniej minimalną liczbę bajtów z bieżącego strumienia i rozwija pozycję w strumieniu przez liczbę 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 przesuwa pozycję w strumieniu o jeden bajt lub zwraca wartość -1, jeśli na końcu strumienia.

ReadExactly(Byte[], Int32, Int32)

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

ReadExactly(Span<Byte>)

Odczytuje bajty z bieżącego strumienia i przesuwa pozycję w strumieniu do buffer momentu 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 zastąpieniu 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 bezpieczną wątkowo (zsynchronizowaną) otokę wokół określonego Stream obiektu.

ToString()

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

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

Sprawdza poprawność argumentów udostępnianych do odczytywania i zapisywania metod w systemie Stream.

ValidateCopyToArguments(Stream, Int32)

Sprawdza poprawność argumentów podanych w metodzie 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 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 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 jednorazowego użytku asynchronicznego.

Dotyczy

Zobacz też