Stream Osztály

Definíció

A bájtok sorozatának általános nézetét biztosítja. Ez egy absztrakt osztály.

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
Öröklődés
Stream
Öröklődés
Származtatott
Attribútumok
Megvalósítás

Példák

Az alábbi példa bemutatja, hogyan használhat két FileStream objektumot a fájlok aszinkron másolására az egyik könyvtárból egy másik könyvtárba. Az FileStream osztály az Stream osztályból származik. Figyelje meg, hogy a Click vezérlő eseménykezelője Button a módosítóval async van megjelölve, mert aszinkron metódust hív meg.

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

Megjegyzések

Stream az összes stream absztrakt alaposztálya. A stream bájtok sorozatának absztrakciója, például fájl, bemeneti/kimeneti eszköz, folyamatközi kommunikációs cső vagy TCP/IP-szoftvercsatorna. Az Stream osztály és származtatott osztályai általános képet nyújtanak ezekről a különböző típusú bemenetről és kimenetről, és elkülönítik a programozót az operációs rendszer és a mögöttes eszközök konkrét részleteitől.

A streamek három alapvető műveletet foglalnak magukban:

  • Streamekből is olvashat. Az olvasás az adatok átvitele egy adatfolyamból egy adatstruktúrába, például bájtokból álló tömbbe.

  • Streamekbe is írhat. Az írás az adatok átvitele egy adatstruktúrából egy adatfolyamba.

  • A streamek támogathatják a keresést. A keresés az aktuális pozíció lekérdezésére és módosítására vonatkozik egy streamen belül. A keresési képesség attól függ, hogy a stream milyen típusú háttértárolóval rendelkezik. A hálózati streamek például nem rendelkeznek egységes koncepcióval az aktuális pozícióról, ezért általában nem támogatják a keresést.

Az öröklődő Stream leggyakrabban használt streamek közül néhány a következők FileStream: és MemoryStream.

A mögöttes adatforrástól vagy adattártól függően előfordulhat, hogy a streamek csak néhány ilyen képességet támogatnak. A streameket az CanReadosztály , CanWriteés CanSeek tulajdonságai Stream segítségével kérdezheti le a képességeiről.

Az Read adatok olvasása és Write írása különböző formátumokban. A keresést támogató streamek esetében a Seek metódusok és SetLength a PositionLength tulajdonságok használatával lekérdezheti és módosíthatja a streamek aktuális pozícióját és hosszát.

Ez a típus implementálja a IDisposable felületet. Ha befejezte a típus használatát, közvetlenül (a metódus meghívásával) vagy közvetetten (például using a C#-ban) kell elhelyeznie Dispose a típust. További információ: Az IDisposable-t megvalósító objektum használata.

Az Stream objektum törlése kiüríti a pufferelt adatokat, és lényegében meghívja Önnek a Flush metódust. Dispose Emellett olyan operációsrendszer-erőforrásokat is felszabadít, mint a fájlfogópontok, a hálózati kapcsolatok vagy a belső puffereléshez használt memória. Az BufferedStream osztály lehetővé teszi egy pufferelt stream egy másik stream körüli körbefuttatását az olvasási és írási teljesítmény javítása érdekében.

A .NET Framework 4.5-től kezdve a Stream osztály aszinkron metódusokat tartalmaz az aszinkron műveletek egyszerűsítéséhez. Az aszinkron metódus a nevében szerepelAsync, például ReadAsync: , WriteAsyncCopyToAsyncés FlushAsync. Ezek a módszerek lehetővé teszik az erőforrás-igényes I/O-műveletek végrehajtását a fő szál blokkolása nélkül. Ez a teljesítménybeli szempont különösen fontos egy Windows 8.x Áruházbeli vagy asztali alkalmazásban, ahol egy időigényes streamelési művelet blokkolhatja a felhasználói felületi szálat, és úgy jelenik meg, mintha az alkalmazás nem működna. Az aszinkron metódusok a async és await kulcsszavakkal együtt használatosak Visual Basic és C# nyelven.

Ha Windows 8.x Áruházbeli alkalmazásban használják, a Stream két bővítménymetelyt tartalmaz: AsInputStream és AsOutputStream. Ezek a metódusok átalakítanak egy Stream objektumot a Windows-futtatókörnyezet egy adatfolyamává. A Windows-futtatókörnyezet streameket Stream objektummá is konvertálhatja a AsStreamForRead és AsStreamForWrite metódusokkal. További információ: Hogyan is: Konvertálás .NET keretrendszer streamek és Windows-futtatókörnyezet streamek között

Egyes stream-implementációk helyi pufferelést végeznek a mögöttes adatokon a teljesítmény javítása érdekében. Az ilyen adatfolyamok esetében a Flush belső pufferek törléséhez vagy FlushAsync a metódus használatával biztosíthatja, hogy az összes adat az alapul szolgáló adatforrásba vagy adattárba lett-e írva.

Ha olyan streamre van szüksége, amely nem rendelkezik háttértárolóval (más néven bitgyűjtővel), a Null mező használatával lekérheti az erre a célra tervezett stream egy példányát.

Megjegyzések az implementálókhoz

Ha származtatott osztályt Streamimplementál, meg kell adnia a implementációkat és Read(Byte[], Int32, Int32) a Write(Byte[], Int32, Int32) metódusokat. Az aszinkron metódusok a ReadAsync(Byte[], Int32, Int32)WriteAsync(Byte[], Int32, Int32) szinkron metódusokat CopyToAsync(Stream)Read(Byte[], Int32, Int32)Write(Byte[], Int32, Int32) és azok implementációit használják. Ezért az aszinkron metódusok implementációi Read(Byte[], Int32, Int32)Write(Byte[], Int32, Int32) és azok megfelelően fognak működni. Az alapértelmezett implementációk ReadByte()WriteByte(Byte) egy új, egyelemű bájttömböt hoznak létre, majd meghívják az és Read(Byte[], Int32, Int32)Write(Byte[], Int32, Int32)a . Ha a forrásból Streamszármazik, javasoljuk, hogy a lényegesen jobb teljesítmény érdekében felülbírálja ezeket a metódusokat a belső puffer eléréséhez, ha van ilyen. Emellett meg kell adnia a CanRead, CanSeek, , CanWriteFlush(), Length, PositionSeek(Int64, SeekOrigin)és SetLength(Int64).

Ne bírálja felül a Close() metódust, hanem helyezze az összes tisztítási Stream logikát a Dispose(Boolean) metódusba. További információ: Az elidegenítési módszer implementálása.

Konstruktorok

Name Description
Stream()

Inicializálja a Stream osztály új példányát.

Mezők

Name Description
Null

Egy Stream háttértár nélkül.

Tulajdonságok

Name Description
CanRead

Ha egy származtatott osztályban felül van bírálva, egy értéket kap, amely jelzi, hogy az aktuális stream támogatja-e az olvasást.

CanSeek

Ha egy származtatott osztályban felül van bírálva, egy értéket kap, amely jelzi, hogy az aktuális stream támogatja-e a keresést.

CanTimeout

Olyan értéket kap, amely meghatározza, hogy az aktuális stream időtúllépést okozhat-e.

CanWrite

Ha egy származtatott osztályban felül van bírálva, egy értéket kap, amely jelzi, hogy az aktuális stream támogatja-e az írást.

Length

Ha egy származtatott osztályban felülbírált, a stream bájtban megadott hosszát kapja meg.

Position

Ha egy származtatott osztályban felül van bírálva, lekéri vagy beállítja az aktuális streamen belüli pozíciót.

ReadTimeout

Ezredmásodpercben lekéri vagy beállítja azt az értéket, amely meghatározza, hogy a stream mennyi ideig kísérel meg olvasni, mielőtt túllépi az időkorlátot.

WriteTimeout

Ezredmásodpercben lekéri vagy beállít egy értéket, amely meghatározza, hogy a stream mennyi ideig kísérel meg írni, mielőtt időtúllépést végezne.

Metódusok

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

Aszinkron olvasási műveletet kezd. (Fontolja meg a használatot ReadAsync(Byte[], Int32, Int32) .)

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

Aszinkron írási műveletet kezd. (Fontolja meg a használatot WriteAsync(Byte[], Int32, Int32) .)

Close()

Bezárja az aktuális streamet, és felszabadítja az aktuális adatfolyamhoz társított összes erőforrást (például szoftvercsatornákat és fájlfogópontokat). A metódus meghívása helyett győződjön meg arról, hogy a stream megfelelően van elosztva.

CopyTo(Stream, Int32)

Beolvassa a bájtokat az aktuális streamből, és egy megadott pufferméret használatával egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki.

CopyTo(Stream)

Beolvassa a bájtokat az aktuális streamből, és egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki.

CopyToAsync(Stream, CancellationToken)

Aszinkron módon beolvassa a bájtokat az aktuális streamből, és egy megadott lemondási jogkivonat használatával egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki.

CopyToAsync(Stream, Int32, CancellationToken)

Aszinkron módon beolvassa a bájtokat az aktuális streamből, és egy megadott pufferméret és lemondási jogkivonat használatával egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki.

CopyToAsync(Stream, Int32)

Aszinkron módon beolvassa a bájtokat az aktuális adatfolyamból, és egy megadott puffermérettel egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki.

CopyToAsync(Stream)

Aszinkron módon beolvassa a bájtokat az aktuális streamből, és egy másik streambe írja őket. Mindkét streampozíciót a másolt bájtok száma emeli ki.

CreateObjRef(Type)

Létrehoz egy objektumot, amely tartalmazza a távoli objektumokkal való kommunikációhoz használt proxy létrehozásához szükséges összes releváns információt.

(Öröklődés forrása MarshalByRefObject)
CreateWaitHandle()
Elavult.
Elavult.
Elavult.

Objektum lefoglalása WaitHandle .

Dispose()

Felszabadítja a .-hez használt összes erőforrást Stream.

Dispose(Boolean)

Felszabadítja a felügyelt erőforrások által Stream használt nem felügyelt erőforrásokat, és opcionálisan felszabadítja a felügyelt erőforrásokat.

DisposeAsync()

Aszinkron módon felszabadítja a nem felügyelt erőforrásokat, amelyeket a Stream.

EndRead(IAsyncResult)

Megvárja, amíg a függőben lévő aszinkron olvasás befejeződik. (Fontolja meg a használatot ReadAsync(Byte[], Int32, Int32) .)

EndWrite(IAsyncResult)

Aszinkron írási művelet befejezése. (Fontolja meg a használatot WriteAsync(Byte[], Int32, Int32) .)

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
Flush()

Ha egy származtatott osztályban felül van bírálva, törli a stream összes pufferét, és a pufferelt adatokat a mögöttes eszközre írja.

FlushAsync()

Aszinkron módon törli az adatfolyam összes pufferét, és a pufferelt adatokat a mögöttes eszközre írja.

FlushAsync(CancellationToken)

Aszinkron módon törli a stream összes pufferét, a pufferelt adatokat az alapul szolgáló eszközre írja, és figyeli a lemondási kérelmeket.

GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetLifetimeService()
Elavult.

Lekéri a példány élettartamszabályzatát vezérlő aktuális élettartam-szolgáltatásobjektumot.

(Öröklődés forrása MarshalByRefObject)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
InitializeLifetimeService()
Elavult.

Beolvas egy élettartam-szolgáltatásobjektumot a példány élettartam-szabályzatának szabályozásához.

(Öröklődés forrása MarshalByRefObject)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
MemberwiseClone(Boolean)

Az aktuális MarshalByRefObject objektum sekély másolatát hozza létre.

(Öröklődés forrása MarshalByRefObject)
ObjectInvariant()
Elavult.

Támogatja a Contract.

Read(Byte[], Int32, Int32)

Ha egy származtatott osztályban felülbírált, beolvassa az aktuális adatfolyamból származó bájtok sorozatát, és az olvasási bájtok számával előrelép a streamben.

Read(Span<Byte>)

Ha egy származtatott osztályban felülbírált, beolvassa az aktuális adatfolyamból származó bájtok sorozatát, és az olvasási bájtok számával előrelép a streamben.

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

Aszinkron módon beolvassa a bájtok sorozatát az aktuális adatfolyamból, az olvasási bájtok számával előrelép a streamben, és figyeli a lemondási kérelmeket.

ReadAsync(Byte[], Int32, Int32)

Aszinkron módon beolvassa az aktuális adatfolyamból származó bájtok sorozatát, és az olvasási bájtok számával előrelépteti a streamen belüli pozíciót.

ReadAsync(Memory<Byte>, CancellationToken)

Aszinkron módon beolvassa a bájtok sorozatát az aktuális adatfolyamból, az olvasási bájtok számával előrelép a streamben, és figyeli a lemondási kérelmeket.

ReadAtLeast(Span<Byte>, Int32, Boolean)

Legalább egy bájtot olvas be az aktuális adatfolyamból, és az olvasási bájtok számával előrelép a streamen belül.

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

Aszinkron módon legalább egy minimális bájtszámot olvas be az aktuális streamből, az olvasási bájtok számával előrelép a streamen belül, és figyeli a lemondási kérelmeket.

ReadByte()

Beolvassa a bájtot a streamből, és egy bájttal előrelép a streamben, vagy -1 ad vissza, ha a stream végén van.

ReadExactly(Byte[], Int32, Int32)

Beolvassa a bájtok count számát az aktuális streamből, és előrelép a streamen belüli pozíción.

ReadExactly(Span<Byte>)

Beolvassa a bájtokat az aktuális adatfolyamból, és a streamen belüli pozíciót a feltöltésig buffer előrelépteti.

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

Aszinkron módon beolvassa a bájtok count számát az aktuális streamből, előrelép a streamben, és figyeli a lemondási kérelmeket.

ReadExactlyAsync(Memory<Byte>, CancellationToken)

Aszinkron módon beolvassa a bájtokat az aktuális adatfolyamból, a streamen belüli pozíciót a feltöltésig buffer , és figyeli a lemondási kérelmeket.

Seek(Int64, SeekOrigin)

Ha egy származtatott osztályban felül van bírálva, beállítja az aktuális streamen belüli pozíciót.

SetLength(Int64)

Ha egy származtatott osztályban felül van bírálva, adja meg az aktuális stream hosszát.

Synchronized(Stream)

Szálbiztos (szinkronizált) burkolót hoz létre a megadott Stream objektum köré.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)
ValidateBufferArguments(Byte[], Int32, Int32)

Ellenőrzi a metódusok olvasásához és írásához megadott argumentumokat.Stream

ValidateCopyToArguments(Stream, Int32)

Ellenőrzi a metódusokhoz megadott CopyTo(Stream, Int32)CopyToAsync(Stream, Int32, CancellationToken) argumentumokat.

Write(Byte[], Int32, Int32)

Ha egy származtatott osztályban felülbírált, bájtok sorozatát írja az aktuális adatfolyamba, és a megírt bájtok számával előrelép a stream aktuális pozícióján.

Write(ReadOnlySpan<Byte>)

Ha egy származtatott osztályban felülbírált, bájtok sorozatát írja az aktuális adatfolyamba, és a megírt bájtok számával előrelép a stream aktuális pozícióján.

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

Aszinkron módon bájtok sorozatát írja az aktuális streambe, az aktuális pozíciót a streamen belül a megírt bájtok számával lépteti előre, és figyeli a lemondási kérelmeket.

WriteAsync(Byte[], Int32, Int32)

Aszinkron módon bájtok sorozatát írja az aktuális adatfolyamba, és a megírt bájtok számával előrelépteti a stream aktuális pozícióját.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Aszinkron módon bájtok sorozatát írja az aktuális streambe, az aktuális pozíciót a streamen belül a megírt bájtok számával lépteti előre, és figyeli a lemondási kérelmeket.

WriteByte(Byte)

Bájtot ír a stream aktuális helyére, és egy bájttal előrelépteti a streamen belüli pozíciót.

Explicit interfész-implementációk

Name Description
IDisposable.Dispose()

Felszabadítja a .-hez használt összes erőforrást Stream.

Bővítő metódusok

Name Description
AsInputStream(Stream)

A .NET felügyelt streamet konvertálja Windows Store-alkalmazásokhoz a Windows-futtatókörnyezet bemeneti adatfolyamává.

AsOutputStream(Stream)

A .NET felügyelt streamet konvertálja az Windows Store-alkalmazásokhoz a Windows-futtatókörnyezet kimeneti adatfolyamává.

AsRandomAccessStream(Stream)

A megadott streamet véletlenszerű hozzáférési adatfolyammá alakítja.

ConfigureAwait(IAsyncDisposable, Boolean)

Konfigurálja, hogy az aszinkron eldobható feladatok hogyan lesznek végrehajtva.

CopyToAsync(Stream, PipeWriter, CancellationToken)

Aszinkron módon beolvassa a bájtokat a Stream megadottból, és egy lemondási jogkivonat használatával írja őket a megadottba PipeWriter.

A következőre érvényes:

Lásd még