Stream Třída

Definice

Poskytuje obecné zobrazení posloupnosti bajtů. Toto je abstraktní třída.

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
Dědičnost
Stream
Dědičnost
Odvozené
Atributy
Implementuje

Příklady

Následující příklad ukazuje, jak použít dva FileStream objekty k asynchronnímu kopírování souborů z jednoho adresáře do jiného adresáře. Třída FileStream je odvozena od Stream třídy. Je třeba poznamenat, že obslužná rutina Click pro ovládací prvek Button je označena modifikátorem async, jelikož volá asynchronní metodu.

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

Poznámky

Stream je abstraktní základní třída všech datových proudů. Stream je abstrakce posloupnosti bajtů, jako je soubor, vstupní/výstupní zařízení, komunikační kanál mezi procesy nebo soket TCP/IP. Třída Stream a jeho odvozené třídy poskytují obecné zobrazení těchto různých typů vstupu a výstupu a izolovat programátora od konkrétních podrobností operačního systému a podkladových zařízení.

Datové proudy zahrnují tři základní operace:

  • Můžete číst ze streamů. Čtení je přenos dat z datového proudu do datové struktury, například pole bajtů.

  • Můžete psát do datových proudů. Zápis je přenos dat z datové struktury do datového proudu.

  • Toky může podporovat hledání. Hledání odkazuje na dotazování a úpravu aktuální pozice v rámci datového proudu. Funkce hledání závisí na druhu záložního úložiště, které má datový proud. Například síťové streamy nemají jednotný koncept aktuální pozice, a proto obvykle nepodporují hledání.

Některé z běžně používaných datových proudů, které dědí z Stream těchto datových proudů, jsou FileStreama MemoryStream.

V závislosti na podkladovém zdroji dat nebo úložišti můžou streamy podporovat jenom některé z těchto funkcí. Datový proud můžete dotazovat na jeho schopnosti pomocí CanRead, CanWritea CanSeek vlastností Stream třídy.

Metody Read a Write čtení a zápis dat v různých formátech. U datových proudů, které podporují hledání, použijte metody Seek a Position SetLength Length vlastnosti k dotazování a úpravě aktuální pozice a délky datového proudu.

Tento typ implementuje IDisposable rozhraní. Po použití tohoto typu byste ho měli odstranit buď přímo, nebo nepřímo. Chcete-li odstranit typ přímo, zavolejte jeho Dispose metodu try/catch v bloku. Pokud ho chcete zlikvidovat nepřímo, použijte konstruktor jazyka, jako using je (v jazyce C#) nebo Using (v Visual Basic). Další informace naleznete v části Použití objektu, který implementuje IDisposable v IDisposable tématu rozhraní.

Když Stream objekt vyprázdníte všechna data uložená do vyrovnávací paměti, v podstatě volá metodu Flush za vás. Dispose uvolní také prostředky operačního systému, jako jsou popisovače souborů, síťová připojení nebo paměť používaná pro jakékoli interní ukládání do vyrovnávací paměti. Třída BufferedStream poskytuje schopnost zabalení streamu do vyrovnávací paměti kolem jiného datového proudu za účelem zlepšení výkonu čtení a zápisu.

Počínaje .NET Framework 4.5 Stream třída obsahuje asynchronní metody pro zjednodušení asynchronních operací. Asynchronní metoda obsahuje Async název, například ReadAsync, , WriteAsyncCopyToAsynca FlushAsync. Tyto metody umožňují provádět vstupně-výstupní operace náročné na prostředky bez blokování hlavního vlákna. Tento faktor výkonu je obzvláště důležitý v aplikaci Windows 8.x Store nebo desktopové aplikaci, kde může časově náročná operace streamu blokovat vlákno uživatelského rozhraní a zobrazit aplikaci, jako by nefungovala. Asynchronní metody se používají ve spojení s async await klíčovými slovy v Visual Basic a C#.

Při použití v aplikaci Windows 8.x Store obsahuje Stream dvě metody rozšíření: AsInputStream a AsOutputStream. Tyto metody převedou Stream objekt na datový proud v prostředí Windows Runtime. Datový proud v prostředí Windows Runtime můžete také převést na Stream objekt pomocí metod AsStreamForRead a AsStreamForWrite metod. Další informace najdete v tématu Postupy: Převod mezi .NET Framework Toky a prostředí Windows Runtime Toky

Některé implementace datových proudů provádějí místní ukládání podkladových dat do vyrovnávací paměti, aby se zlepšil výkon. U těchto datových proudů můžete pomocí této Flush FlushAsync metody vymazat všechny interní vyrovnávací paměti a zajistit, aby se všechna data zapisovala do podkladového zdroje dat nebo úložiště.

Pokud potřebujete datový proud bez záložního úložiště (označovaného také jako bitový kbelík), použijte Null toto pole k načtení instance datového proudu navrženého pro tento účel.

Poznámky pro implementátory

Při implementaci odvozené třídy Stream, musíte poskytnout implementace pro tyto Read(Byte[], Int32, Int32) a Write(Byte[], Int32, Int32) metody. Asynchronní metody ReadAsync(Byte[], Int32, Int32)a WriteAsync(Byte[], Int32, Int32)synchronní metody Read(Byte[], Int32, Int32) a CopyToAsync(Stream) Write(Byte[], Int32, Int32) jejich implementace. Proto vaše implementace Read(Byte[], Int32, Int32) a Write(Byte[], Int32, Int32) budou správně fungovat s asynchronními metodami. Výchozí implementace ReadByte() a WriteByte(Byte) vytvoření nového bajtového pole s jedním prvkem a následné volání implementace Read(Byte[], Int32, Int32) a Write(Byte[], Int32, Int32). Při odvození Streamdoporučujeme tyto metody přepsat pro přístup k interní vyrovnávací paměti, pokud ho máte, pro podstatně lepší výkon. Musíte také poskytnout implementace CanRead, , CanSeek, CanWrite, Flush(), Length, Position, Seek(Int64, SeekOrigin)a SetLength(Int64).

Nepřepište metoduClose(), místo toho vložte do metody veškerou logiku Dispose(Boolean) Stream vyčištění. Další informace naleznete v tématu Implementace metody Dispose.

Konstruktory

Stream()

Inicializuje novou instanci Stream třídy.

Pole

Null

Bez Stream záložního úložiště.

Vlastnosti

CanRead

Při přepsání v odvozené třídě získá hodnotu označující, zda aktuální datový proud podporuje čtení.

CanSeek

Při přepsání v odvozené třídě získá hodnotu označující, zda aktuální datový proud podporuje hledání.

CanTimeout

Získá hodnotu, která určuje, zda aktuální datový proud může časový limit.

CanWrite

Při přepsání v odvozené třídě získá hodnotu označující, zda aktuální datový proud podporuje zápis.

Length

Při přepsání v odvozené třídě získá délku v bajtech datového proudu.

Position

Při přepsání v odvozené třídě získá nebo nastaví pozici v rámci aktuálního datového proudu.

ReadTimeout

Získá nebo nastaví hodnotu v milisekundách, která určuje, jak dlouho se datový proud pokusí přečíst před časovým limitem.

WriteTimeout

Získá nebo nastaví hodnotu v milisekundách, která určuje, jak dlouho se datový proud pokusí zapsat před časovým limitem.

Metody

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

Zahájí asynchronní operaci čtení. (Zvažte místo toho použití ReadAsync(Byte[], Int32, Int32) .)

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

Zahájí asynchronní operaci zápisu. (Zvažte místo toho použití WriteAsync(Byte[], Int32, Int32) .)

Close()

Zavře aktuální datový proud a uvolní všechny prostředky (například sokety a popisovače souborů) přidružené k aktuálnímu datovému proudu. Místo volání této metody se ujistěte, že je stream správně odstraněn.

CopyTo(Stream)

Přečte bajty z aktuálního streamu a zapíše je do jiného datového proudu. Obě pozice datových proudů jsou rozšířeny počtem zkopírovaných bajtů.

CopyTo(Stream, Int32)

Načte bajty z aktuálního datového proudu a zapíše je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti. Obě pozice datových proudů jsou rozšířeny počtem zkopírovaných bajtů.

CopyToAsync(Stream)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu. Obě pozice datových proudů jsou rozšířeny počtem zkopírovaných bajtů.

CopyToAsync(Stream, CancellationToken)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadaného tokenu zrušení. Obě pozice datových proudů jsou rozšířeny počtem zkopírovaných bajtů.

CopyToAsync(Stream, Int32)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti. Obě pozice datových proudů jsou rozšířeny počtem zkopírovaných bajtů.

CopyToAsync(Stream, Int32, CancellationToken)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu pomocí zadané velikosti vyrovnávací paměti a tokenu zrušení. Obě pozice datových proudů jsou rozšířeny počtem zkopírovaných bajtů.

CreateObjRef(Type)

Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy serveru sloužícího ke komunikaci se vzdáleným objektem.

(Zděděno od MarshalByRefObject)
CreateWaitHandle()
Zastaralé.
Zastaralé.

WaitHandle Přidělí objekt.

Dispose()

Uvolní všechny prostředky používané nástrojem Stream.

Dispose(Boolean)

Uvolní nespravované prostředky používané a Stream volitelně uvolní spravované prostředky.

DisposeAsync()

Asynchronně uvolní nespravované prostředky používané nástrojem Stream.

EndRead(IAsyncResult)

Čeká na dokončení čekajícího asynchronního čtení. (Zvažte místo toho použití ReadAsync(Byte[], Int32, Int32) .)

EndWrite(IAsyncResult)

Ukončí asynchronní operaci zápisu. (Zvažte raději použití WriteAsync(Byte[], Int32, Int32) .)

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
Flush()

Při přepsání v odvozené třídě vymaže všechny vyrovnávací paměti pro tento datový proud a způsobí zápis všech uložených dat do základního zařízení.

FlushAsync()

Asynchronně vymaže všechny vyrovnávací paměti pro tento datový proud a způsobí zápis všech uložených dat do podkladového zařízení.

FlushAsync(CancellationToken)

Asynchronně vymaže všechny vyrovnávací paměti pro tento datový proud, způsobí zápis všech uložených dat do základního zařízení a monitoruje žádosti o zrušení.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetLifetimeService()
Zastaralé.

Načte aktuální objekt služby životnosti, který řídí zásady životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
GetType()

Type Získá aktuální instanci.

(Zděděno od Object)
InitializeLifetimeService()
Zastaralé.

Získá objekt služby životnosti pro řízení zásad životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
MemberwiseClone()

Vytvoří použádnou kopii aktuálního souboru Object.

(Zděděno od Object)
MemberwiseClone(Boolean)

Vytvoří mělkou kopii aktuálního MarshalByRefObject objektu.

(Zděděno od MarshalByRefObject)
ObjectInvariant()
Zastaralé.

Poskytuje podporu pro Contract.

Read(Byte[], Int32, Int32)

Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v datovém proudu o počet bajtů přečtených.

Read(Span<Byte>)

Při přepsání v odvozené třídě přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v datovém proudu o počet bajtů přečtených.

ReadAsync(Byte[], Int32, Int32)

Asynchronně přečte posloupnost bajtů z aktuálního datového proudu a posune pozici v datovém proudu o počet přečtených bajtů.

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

Asynchronně přečte posloupnost bajtů z aktuálního datového proudu, posune pozici v rámci datového proudu o počet přečtených bajtů a monitoruje žádosti o zrušení.

ReadAsync(Memory<Byte>, CancellationToken)

Asynchronně přečte posloupnost bajtů z aktuálního datového proudu, posune pozici v rámci datového proudu o počet přečtených bajtů a monitoruje žádosti o zrušení.

ReadByte()

Přečte bajt ze streamu a posune pozici v rámci datového proudu o jeden bajt nebo vrátí hodnotu -1, pokud je na konci datového proudu.

Seek(Int64, SeekOrigin)

Při přepsání v odvozené třídě nastaví pozici v aktuálním datovém proudu.

SetLength(Int64)

Při přepsání v odvozené třídě nastaví délku aktuálního datového proudu.

Synchronized(Stream)

Vytvoří obálku zabezpečenou (synchronizovanou) vlákno kolem zadaného Stream objektu.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
ValidateBufferArguments(Byte[], Int32, Int32)

Ověřuje argumenty zadané pro metody čtení a zápisu .Stream

ValidateCopyToArguments(Stream, Int32)

Ověřuje argumenty zadané pro metody CopyTo(Stream, Int32) nebo CopyToAsync(Stream, Int32, CancellationToken) metody.

Write(Byte[], Int32, Int32)

Při přepsání v odvozené třídě zapíše posloupnost bajtů do aktuálního datového proudu a přejde aktuální pozici v rámci tohoto streamu o počet zapsaných bajtů.

Write(ReadOnlySpan<Byte>)

Při přepsání v odvozené třídě zapíše posloupnost bajtů do aktuálního datového proudu a přejde aktuální pozici v rámci tohoto streamu o počet zapsaných bajtů.

WriteAsync(Byte[], Int32, Int32)

Asynchronně zapíše posloupnost bajtů do aktuálního datového proudu a posune aktuální pozici v tomto streamu o počet zapsaných bajtů.

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

Asynchronní zápis posloupnost bajtů do aktuálního datového proudu, posune aktuální pozici v rámci tohoto datového proudu o počet bajtů napsaných a monitoruje žádosti o zrušení.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchronně zapíše posloupnost bajtů do aktuálního datového proudu, posune aktuální pozici v rámci tohoto streamu o počet zapsaných bajtů a monitoruje žádosti o zrušení.

WriteByte(Byte)

Zapíše bajt na aktuální pozici ve streamu a posune pozici v rámci datového proudu o jeden bajt.

Explicitní implementace rozhraní

IDisposable.Dispose()

Uvolní všechny prostředky používané nástrojem Stream.

Metody rozšíření

AsInputStream(Stream)

Převede spravovaný datový proud v .NET pro aplikace Windows Store na vstupní datový proud v prostředí Windows Runtime.

AsOutputStream(Stream)

Převede spravovaný datový proud v .NET pro aplikace Windows Store na výstupní datový proud v prostředí Windows Runtime.

AsRandomAccessStream(Stream)

Převede zadaný datový proud na datový proud s náhodným přístupem.

ConfigureAwait(IAsyncDisposable, Boolean)

Nakonfiguruje, jak se čekají na úlohy vrácené z asynchronního jednorázového provedení.

Platí pro

Viz také