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 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 sekvence 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 vstupu a výstupu a izolují programátora od konkrétních podrobností operačního systému a základní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 vyhledává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ě datového proudu. Například síťové datové proudy nemají jednotný koncept aktuální pozice, a proto obvykle nepodporují vyhledávání.

Mezi nejčastěji používané datové proudy, 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 třídy , CanWritea CanSeek .

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 a SetLength a Position vlastnosti a Length k dotazování a úpravě aktuální pozice a délky datového proudu.

Tento typ implementuje IDisposable rozhraní . Až s použitím typu skončíte, měli byste ho odstranit přímo nebo nepřímo. Chcete-li odstranit typ přímo, zavolejte jeho Dispose metodu try/catch v bloku. Pokud ho chcete odstranit nepřímo, použijte konstruktor jazyka, jako using je (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í.

Při likvidaci objektu se Stream vyprázdní všechna data ve vyrovnávací paměti a v podstatě se Flush zavolá metoda 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 interní ukládání do vyrovnávací paměti. Třída BufferedStream poskytuje možnost zabalení datového proudu ve 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 obsahuje 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 zvlášť 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 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 Windows 8.x Store obsahuje dvě rozšiřující metody: 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 a AsStreamForWrite . 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 za účelem zvýšení výkonu. 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čovaného také jako bitový kbelík), použijte Null pole k načtení instance datového proudu, který je k tomuto účelu navržený.

Poznámky pro implementátory

Při implementaci odvozené třídy Streammusí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 fungovat správně s asynchronními metodami. Výchozí implementace ReadByte() a WriteByte(Byte) vytvoří nové jednočátové bajtové pole a pak zavolá implementace Read(Byte[], Int32, Int32) a Write(Byte[], Int32, Int32). Pokud odvozujete z Stream, doporučujeme tyto metody přepsat pro přístup k interní vyrovnávací paměti, pokud ji máte, pro zajištění podstatně lepšího výkonu. Musíte také poskytnout implementace , CanReadCanSeekCanWrite, Flush(), Length, PositionSeek(Int64, SeekOrigin), a .SetLength(Int64)

Nepřepište metodu Close() , místo toho vložte do metody veškerou 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

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()

Type Získá z aktuální instance.

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

CopyToAsync(Stream, PipeWriter, CancellationToken)

Asynchronně přečte bajty z objektu Stream a zapíše je do zadaného PipeWriterobjektu pomocí tokenu zruš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í funkce awaits u úloh vrácených z asynchronního jednorázového režimu.

Platí pro

Viz také