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 objekty k asynchronnímu kopírování souborů FileStream z jednoho adresáře do jiného. Třída FileStream je odvozena z 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 abstrakcí posloupnosti bajtů, jako je soubor, vstupní/výstupní zařízení, komunikační kanál mezi procesy nebo soket TCP/IP. Třída a její odvozené třídy poskytují obecné zobrazení těchto různých typů vstupu a výstupu a izolují programátora od konkrétních podrobností o operačním systému a základních Stream zařízeních.

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

  • Do datových proudů můžete zapisovat. 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 úpravy aktuální pozice v rámci datového proudu. Funkce hledání závisí na druhu zálohy úložiště, které datový proud obsahuje. Například síťové streamy nemají žádný jednotný koncept aktuální pozice, a proto obvykle nepodporují hledání.

Mezi nejčastěji používané datové proudy, které dědí z , jsou , a Stream FileStream MemoryStream .

V závislosti na podkladovém zdroji dat nebo úložišti můžou datové proudy podporovat pouze některé z těchto možností. Stream můžete dotazovat na jeho schopnosti pomocí vlastností CanRead CanWrite , a třídy CanSeek Stream .

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

Tento typ implementuje IDisposable rozhraní . Jakmile budete s používáním typu hotovi, měli byste ho přímo nebo nepřímo zlikvidovat. Chcete-li vyřazení typu přímo, Dispose zavolejte jeho metodu v try / catch bloku. Pokud ho chcete nepřímo zlikvidovat, použijte jazykový konstruktor, například using (v jazyce C#) Using nebo (v Visual Basic). Další informace naleznete v části "Using an Object that Implements IDisposable" v IDisposable tématu rozhraní.

Likvidace objektu vyprázdní data ve vyrovnávací paměti a v podstatě za vás Stream Flush zavolá metodu . Dispose také uvolní 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 poskytuje možnost zabalit datový proud do vyrovnávací paměti kolem jiného datového proudu, aby se zlepšil výkon čtení a BufferedStream zápisu.

Počínaje rozhraním .NET Framework 4.5 obsahuje třída asynchronní metody pro Stream zjednodušení asynchronních operací. Asynchronní metoda obsahuje Async v názvu , například , , a ReadAsync WriteAsync CopyToAsync FlushAsync . Tyto metody umožňují provádět V/V operace náročné na prostředky bez blokování hlavního vlákna. Tento výkon je zvlášť důležitý v aplikaci pro Store Windows 8.x nebo desktopové aplikaci, kde časově náročná operace streamu může zablokovat vlákno uživatelského rozhraní a zdají se, jako by vaše aplikace nepracuje. Asynchronní metody se používají ve spojení s klíčovými slovy a v async await Visual Basic a C#.

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

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

Pokud potřebujete datový proud bez pomocný úložiště (označované také jako bitový kbelík), pomocí pole načtěte instanci datového proudu, která je určená Null pro tento účel.

Poznámky pro implementátory

Při implementaci odvozené třídy Stream třídy je nutné poskytnout implementace pro metody Read(Byte[], Int32, Int32) Write(Byte[], Int32, Int32) a . Asynchronní metody ReadAsync(Byte[], Int32, Int32) WriteAsync(Byte[], Int32, Int32) , a používají CopyToAsync(Stream) synchronní metody a Read(Byte[], Int32, Int32) ve svých Write(Byte[], Int32, Int32) implementacích. Proto vaše implementace a budou Read(Byte[], Int32, Int32) Write(Byte[], Int32, Int32) správně fungovat s asynchronními metodami. Výchozí implementace a vytvoří nové pole ReadByte() s jedním prvkem bajtů a potom volají implementace a WriteByte(Byte) Read(Byte[], Int32, Int32) Write(Byte[], Int32, Int32) . Pokud je odvozen z , doporučujeme přepsat tyto metody pro přístup k interní vyrovnávací paměti, pokud Stream ji máte, pro podstatně lepší výkon. Musíte také poskytnout implementace CanRead , , , , , , a CanSeek CanWrite Flush() Length Position Seek(Int64, SeekOrigin) SetLength(Int64) .

Nepřepište metodu , ale dejte do metody všech Close() Stream logiku Dispose(Boolean) čištění. Další informace najdete v tématu Implementace metody Dispose.

Konstruktory

Stream()

Inicializuje novou instanci Stream třídy .

Pole

Null

Bez Stream zálohovací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 časový limit.

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 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í číst před časovým limitem.

WriteTimeout

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

Metody

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

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

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

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

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ě odstraněn.

CopyTo(Stream)

Přečte bajty z aktuálního datového proudu a zapíše je do jiného datového proudu.

CopyTo(Stream, Int32)

Přeč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.

CopyToAsync(Stream)

Asynchronně čte bajty z aktuálního datového proudu a zapisuje je do jiného datového proudu.

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í.

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.

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í.

CreateObjRef(Type)

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

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

Přidělí WaitHandle objekt .

Dispose()

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

Dispose(Boolean)

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

DisposeAsync()

Asynchronně uvolní nespravované prostředky používané objektem Stream .

EndRead(IAsyncResult)

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

EndWrite(IAsyncResult)

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

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 dat ve vyrovnávací paměti 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 ve vyrovnávací paměti do základní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 ve vyrovnávací paměti 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ří kopii aktuálního objektu bez MarshalByRefObject podmět.

(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 sekvence bajtů z aktuálního datového proudu a posune pozici v rámci datového proudu o počet přečtených bajtů.

Read(Span<Byte>)

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

ReadAsync(Byte[], Int32, Int32)

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

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

Asynchronně přečte sekvenci 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 požadavky zrušení.

ReadAsync(Memory<Byte>, CancellationToken)

Asynchronně přečte sekvenci 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 požadavky zrušení.

ReadByte()

Přečte z datového proudu bajtů 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 rámci aktuálního datového 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 obálku bezpečnou pro přístup z více Stream 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 poskytované metodám čtení a zápisu v Stream .

ValidateCopyToArguments(Stream, Int32)

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

Write(Byte[], Int32, Int32)

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

Write(ReadOnlySpan<Byte>)

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

WriteAsync(Byte[], Int32, Int32)

Asynchronně zapíše sekvenci bajtů do aktuálního datového proudu a posune aktuální pozici v rámci tohoto datového proudu o počet zapsané bajty.

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

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

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchronně zapíše sekvenci bajtů do aktuálního datového proudu, posune aktuální pozici v rámci tohoto datového proudu o počet zapsané bajty a monitoruje požadavky 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é v 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é