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 je FileStream 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ů. Datový proud je abstrakce posloupnosti bajtů, jako je soubor, vstupní a výstupní zařízení, komunikační kanál mezi procesy nebo soket TCP/IP. Třída Stream a její odvozené třídy poskytují obecný pohled na tyto různé typy vstupů a výstupů a izolují 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ů.

  • Do datových proudů můžete zapisovat. Zápis je přenos dat z datové struktury 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 Vyhledává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í vyhledávání.

Mezi běžně používané streamy, které dědí z Stream , patří FileStream, a 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 možnosti pomocí CanReadvlastností Stream , CanWritea CanSeek třídy.

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

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

Odstraněním objektu se Stream vyprázdní všechna data ve vyrovnávací paměti a v podstatě zavoláte metodu Flush za vás. 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 BufferedStream poskytuje možnost zabalení datového proudu do vyrovnávací paměti kolem jiného datového proudu za účelem zlepšení výkonu čtení a zápisu.

Počínaje rozhraním .NET Framework 4.5 Stream třída zahrnuje asynchronní metody pro zjednodušení asynchronních operací. Asynchronní metoda obsahuje Async ve svém 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 obzvláště 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 vaše aplikace vypadat, jako by nefungovala. Asynchronní metody se používají ve spojení s klíčovými async slovy a await v jazyce Visual Basic a C#.

Při použití v aplikaci Stream pro Windows 8.x Store obsahuje 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í AsStreamForRead metod aAsStreamForWrite. Další informace najdete v tématu Postupy: Převod mezi datovými proudy rozhraní .NET Framework a prostředí Windows Runtime Streamy.

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 takových datových proudů můžete pomocí Flush metody nebo FlushAsync vymazat všechny interní vyrovnávací paměti a zajistit, aby všechna data byla zapsána do podkladového zdroje dat nebo úložiště.

Pokud potřebujete datový proud bez záložního úložiště (označuje se také jako bitový kbelík), použijte Null toto pole 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 Stream, musíte poskytnout implementace pro Read(Byte[], Int32, Int32) metody a Write(Byte[], Int32, Int32) . 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) ve svých 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ření nového pole s jedním prvkem bajtů a pak volání implementace Read(Byte[], Int32, Int32) a Write(Byte[], Int32, Int32). Pokud odvozujete z Stream, doporučujeme tyto metody přepsat, abyste získali přístup k interní vyrovnávací paměti, pokud ji máte, pro zajištění podstatně lepšího výkonu. Musíte také zadat implementace , CanRead, CanSeek, CanWrite, Flush()Length, Position, , Seek(Int64, SeekOrigin)a SetLength(Int64).

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

Konstruktory

Stream()

Inicializuje novou instanci Stream třídy .

Pole

Null

A Stream bez 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 vypršení časového limitu.

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 datového proudu v bajtech.

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í číst před vypršením časového limitu.

WriteTimeout

Získá nebo nastaví hodnotu v milisekundách, která určuje, jak dlouho se datový proud pokusí zapisovat před vypršení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 datový proud je 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. Obě pozice datových proudů se posouvají podle počtu 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 s použitím zadané velikosti vyrovnávací paměti. Obě pozice datových proudů se posouvají podle počtu 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ů se posouvají podle počtu zkopírovaných bajtů.

CopyToAsync(Stream, CancellationToken)

Asynchronně přečte bajty z aktuálního datového proudu a zapíše je do jiného datového proudu pomocí zadaného tokenu zrušení. Obě pozice datových proudů se posouvají podle počtu 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ů se posouvají podle počtu 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ů se posouvají podle počtu zkopírovaných bajtů.

CreateObjRef(Type)

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

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

Přidělí WaitHandle objekt.

Dispose()

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

Dispose(Boolean)

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

DisposeAsync()

Asynchronně uvolní nespravované prostředky, které Streampoužívá .

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čí, 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 do 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 do 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 do vyrovnávací paměti do základního zařízení a monitoruje požadavky na zrušení.

GetHashCode()

Slouží jako výchozí hashovací funkce.

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

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

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

Získá aktuální Type instanci.

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

Získá životnost objektu služby, který řídí zásady životnosti pro tuto instanci.

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

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

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

Read(Span<Byte>)

Při přepsání v odvozené třídě 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)

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

ReadAtLeast(Span<Byte>, Int32, Boolean)

Přečte alespoň minimální počet 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ů.

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

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

ReadByte()

Načte bajt z datového proudu a posune pozici v datovém proudu o jeden bajt, nebo vrátí hodnotu -1, pokud je na konci datového proudu.

ReadExactly(Byte[], Int32, Int32)

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

ReadExactly(Span<Byte>)

Načte bajty z aktuálního datového proudu a posune pozici v rámci datového proudu, dokud buffer není vyplněna.

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

Asynchronně nač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 až do buffer vyplnění 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ří obálku bezpečnou pro přístup z více vláken (synchronizovanou) 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 poskytnuté metodám čtení a zápisu na .Stream

ValidateCopyToArguments(Stream, Int32)

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

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

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

WriteAsync(Byte[], Int32, Int32)

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

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ých bajtů a sleduje požadavky na 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ých bajtů a sleduje požadavky na zrušení.

WriteByte(Byte)

Zapíše bajt na aktuální pozici v datovém proudu a posune pozici v datovém 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 aplikacích .NET pro Windows Store na vstupní datový proud v prostředí Windows Runtime.

AsOutputStream(Stream)

Převede spravovaný datový proud v aplikacích .NET 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 se provádí čekání na úlohy vrácené z asynchronního jednorázového použití.

Platí pro

Viz také