Stream Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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 |
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 |
| ReadExactly(Span<Byte>) |
Beolvassa a bájtokat az aktuális adatfolyamból, és a streamen belüli pozíciót a feltöltésig |
| ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Aszinkron módon beolvassa a bájtok |
| 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 |
| 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. |