Sdílet prostřednictvím


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 třídy Stream. Všimněte si, že obslužná rutina Click události pro ovládací prvek Button je označena modifikátorem async, protože 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 základních zařízení.

Streamy 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ů.

  • Do streamů můžete zapisovat. Zápis je přenos dat ze struktury dat do datového proudu.

  • Streamy můžou 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é datový proud obsahuje. 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, jsou FileStreama MemoryStream.

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

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

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

Vyprázdnění Stream objektu vyprázdní všechna uložená data ve vyrovnávací paměti a v podstatě za vás zavolá metodu Flush. Dispose také vydává 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 zabalit stream do vyrovnávací paměti kolem jiného datového proudu, aby se zlepšil výkon čtení a zápisu.

Počínaje rozhraním .NET Framework 4.5 obsahuje třída Stream asynchronní metody pro zjednodušení asynchronních operací. Asynchronní metoda obsahuje Async v názvu, například ReadAsync, WriteAsync, CopyToAsynca 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 zvlášť důležitý v aplikaci pro Windows 8.x Store nebo desktopové aplikaci, kde časově náročná operace streamu může blokovat vlákno uživatelského rozhraní a zobrazit aplikaci, jako by nefungovala. Asynchronní metody se používají ve spojení s klíčovými slovy async a await v jazyce Visual Basic a C#.

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

Některé implementace datových proudů provádějí místní ukládání podkladových dat do vyrovnávací paměti za účelem zlepšení výkonu. U těchto datových proudů můžete použít metodu Flush nebo FlushAsync k vymazání všech interních vyrovnávacích pamětí a k zajištění zápisu všech dat 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 pole Null k načtení instance datového proudu, který je pro tento účel navržený.

Poznámky pro implementátory

Při implementaci odvozené třídy Streammusíte poskytnout implementace pro Read(Byte[], Int32, Int32) a Write(Byte[], Int32, Int32) metody. Asynchronní metody ReadAsync(Byte[], Int32, Int32), WriteAsync(Byte[], Int32, Int32)a CopyToAsync(Stream) používají synchronní metody Read(Byte[], Int32, Int32) a Write(Byte[], Int32, Int32) v jejich implementacích. 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řit nové pole bajtů s jedním prvkem a pak volat implementace Read(Byte[], Int32, Int32) a Write(Byte[], Int32, Int32). Při odvození z 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řepsat metodu Close() místo toho vložte do metody Dispose(Boolean) veškerou logiku čištění Stream. Další informace naleznete v tématu Implementace metody Dispose.

Konstruktory

Stream()

Inicializuje novou instanci Stream třídy.

Pole

Null

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

Vlastnosti

CanRead

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

CanSeek

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

CanTimeout

Získá hodnotu, která určuje, zda aktuální datový proud může vypršení časového limitu.

CanWrite

Při přepsání v odvozené třídě získá hodnotu urč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 aktuálním datovém proudu.

ReadTimeout

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

WriteTimeout

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

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 datový proud správně uvolněn.

CopyTo(Stream)

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

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 bajtů zkopírovaných.

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 bajtů zkopírovaných.

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 bajtů zkopírovaných.

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 bajtů zkopírovaných.

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 bajtů zkopírovaných.

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é.
Zastaralé.

Přidělí objekt WaitHandle.

Dispose()

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

Dispose(Boolean)

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

DisposeAsync()

Asynchronně uvolní nespravované prostředky používané 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 místo toho použití WriteAsync(Byte[], Int32, Int32).)

Equals(Object)

Určuje, zda je zadaný objekt roven 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 dat uložených do vyrovnávací paměti 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 dat uložených do vyrovnávací paměti do podkladové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 objekt služby aktuální životnosti, který řídí zásady životnosti pro tuto instanci.

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

Získá Type aktuální instance.

(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ří mělkou kopii aktuálního Object.

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

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

(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 přečtených bajtů.

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 přečtených bajtů.

ReadAsync(Byte[], Int32, Int32)

Asynchronně č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 datovém 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 datovém proudu o počet přečtených bajtů a monitoruje žádosti o zrušení.

ReadAtLeast(Span<Byte>, Int32, Boolean)

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

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

Asynchronně čte alespoň minimální počet 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í -1, pokud je na konci datového proudu.

ReadExactly(Byte[], Int32, Int32)

Přečte count počet bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu.

ReadExactly(Span<Byte>)

Přečte bajty z aktuálního datového proudu a posune pozici v rámci datového proudu, dokud se buffer nenaplní.

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

Asynchronně čte count počet bajtů z aktuálního datového proudu, posune pozici v rámci datového proudu a monitoruje požadavky na zrušení.

ReadExactlyAsync(Memory<Byte>, CancellationToken)

Asynchronně čte bajty z aktuálního datového proudu, posune pozici v rámci datového proudu, dokud se buffer nenaplní, a monitoruje žádosti o zrušení.

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ří kolem zadaného objektu Stream obálku bezpečnou pro přístup z více vláken (synchronizovaný).

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 v Stream.

ValidateCopyToArguments(Stream, Int32)

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

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 posune aktuální pozici v tomto datovém proudu počtem 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 posune aktuální pozici v tomto datovém proudu počtem 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 datovém proudu o počet zapsaných bajtů.

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

Asynchronně zapíše posloupnost bajtů do aktuálního datového proudu, posune aktuální pozici v tomto datovém proudu o počet zapsaných bajtů 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 tomto datovém proudu o počet zapsaných bajtů a monitoruje žádosti o zrušení.

WriteByte(Byte)

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

Explicitní implementace rozhraní

IDisposable.Dispose()

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

Metody rozšíření

CopyToAsync(Stream, PipeWriter, CancellationToken)

Asynchronně čte bajty z Stream a zapisuje je do zadané PipeWriterpomocí tokenu zrušení.

AsInputStream(Stream)

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

AsOutputStream(Stream)

Převede spravovaný datový proud v .NET pro aplikace pro 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)

Konfiguruje, jak čekají na úlohy vrácené z asynchronního jednorázového použití.

Platí pro

Viz také