Stream Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt eine allgemeine Ansicht einer Folge von Bytes bereit. Dies ist eine abstrakte Klasse.
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
- Vererbung
-
Stream
- Vererbung
- Abgeleitet
- Attribute
- Implementiert
Beispiele
Im folgenden Beispiel wird veranschaulicht, wie zwei -Objekte verwendet werden, um die Dateien asynchron aus einem Verzeichnis FileStream in ein anderes Verzeichnis zu kopieren. Die FileStream -Klasse wird aus der Stream -Klasse abgeleitet. Beachten Sie, dass der Click -Ereignishandler für das Button -Steuerelement mit dem async -Modifizierer markiert wird, da er eine asynchrone Methode aufruft.
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
Hinweise
Stream ist die abstrakte Basisklasse aller Streams. Ein Stream (Datenstream) ist eine Abstraktion einer Folge von Bytes, beispielsweise eine Datei, ein Eingabe-/Ausgabegerät, eine Pipe für die Kommunikation zwischen Prozessen oder ein TCP/IP-Socket. Die -Klasse und die abgeleiteten Klassen bieten eine generische Ansicht dieser verschiedenen Eingabe- und Ausgabetypen und isolieren den Programmierer von den spezifischen Details des Betriebssystems und der zugrunde Stream liegenden Geräte.
Streams umfassen drei grundlegende Vorgänge:
Sie können Datenströme lesen. Lesen ist die Übertragung von Daten aus einem Stream in eine Datenstruktur, z. B. ein Bytearray.
Sie können in Streams schreiben. Schreiben ist die Übertragung von Daten aus einer Datenstruktur in einen Stream.
Streams können Suchhilfen unterstützen. Suchen bezieht sich auf das Abfragen und Ändern der aktuellen Position innerhalb eines Streams. Die Suchfunktion hängt von der Art des Hintergrundspeichers ab, über den ein Stream verfügt. Beispielsweise haben Netzwerkstreams kein einheitliches Konzept einer aktuellen Position und unterstützen daher in der Regel keine Suchbegriffe.
Einige der häufiger verwendeten Streams, die von Stream erben, sind , und FileStream MemoryStream .
Abhängig von der zugrunde liegenden Datenquelle oder dem zugrunde liegenden Repository unterstützen Streams möglicherweise nur einige dieser Funktionen. Sie können einen Stream mithilfe der Eigenschaften , und der -Klasse nach CanRead CanWrite seinen Funktionen CanSeek Stream abfragen.
Die Read Methoden und lesen und schreiben Daten in einer Vielzahl von Write Formaten. Verwenden Sie für Streams, die Suchabfragen unterstützen, die Methoden und sowie die Eigenschaften und , um die aktuelle Position und Länge eines Streams abfragt Seek SetLength und zu Position Length ändern.
Dieser Typ implementiert die IDisposable-Schnittstelle. Nach Abschluss der Verwendung sollten Sie den Typ entweder direkt oder indirekt löschen. Zum direkten Löschen des Typs rufen Sie seine Dispose-Methode in einem try/catch-Block auf. Zum indirekten Löschen verwenden Sie ein Sprachkonstrukt wie using (in C#) oder Using (in Visual Basic). Weitere Informationen finden Sie im Abschnitt „Verwenden eines Objekts, das IDisposable implementiert“ des Themas „Die IDisposable-Schnittstelle“.
Wenn Sie ein Stream -Objekt leeren, werden alle gepufferten Daten geleert, und die -Methode Flush wird im Wesentlichen für Sie aufruft. Dispose gibt auch Betriebssystemressourcen wie Dateihandles, Netzwerkverbindungen oder Arbeitsspeicher frei, die für die interne Pufferung verwendet werden. Die -Klasse bietet die Möglichkeit, einen gepufferten Stream um einen anderen Stream zu umschließen, um die Lese- und BufferedStream Schreibleistung zu verbessern.
Ab der .NET Framework 4.5 enthält die -Klasse asynchrone Methoden, Stream um asynchrone Vorgänge zu vereinfachen. Eine asynchrone Methode Async enthält im Namen, z. B. ReadAsync , , und WriteAsync CopyToAsync FlushAsync . Mit diesen Methoden können Sie ressourcenintensive E/A-Vorgänge ausführen, ohne den Hauptthread zu blockieren. Diese Überlegungen zur Leistung sind insbesondere in einer Windows 8.x Store-App oder Desktop-App wichtig, bei der ein zeitaufwendiger Streamingvorgang den UI-Thread blockieren kann und es dann den Anschein hat, dass Ihre App nicht funktioniert. Die asynchronen Methoden werden in Verbindung mit den Schlüsselwörtern async und in Visual Basic und await C# verwendet.
Enthält bei Verwendung in Windows 8.x Store-App Stream zwei Erweiterungsmethoden: AsInputStream und AsOutputStream . Diese Methoden konvertieren ein Stream -Objekt in einen Stream in der Windows Runtime. Sie können einen Stream in der Windows Runtime auch mithilfe der Methoden und in Stream ein AsStreamForRead -Objekt AsStreamForWrite konvertieren. Weitere Informationen finden Sie unter How to: Convert Between .NET Framework Streams and Windows Runtime Streams
Einige Streamimplementierungen führen eine lokale Pufferung der zugrunde liegenden Daten durch, um die Leistung zu verbessern. Für solche Streams können Sie die - oder -Methode verwenden, um alle internen Puffer zu löschen und sicherzustellen, dass alle Daten in die zugrunde liegende Datenquelle oder das zugrunde liegende Flush FlushAsync Repository geschrieben wurden.
Wenn Sie einen Stream ohne Unterstützungsspeicher (auch als Bitb bucket bezeichnet) benötigen, verwenden Sie das -Feld, um eine Instanz eines Streams abzurufen, der für diesen Null Zweck entworfen wurde.
Hinweise für Ausführende
Wenn Sie eine abgeleitete Klasse von Stream implementieren, müssen Sie Implementierungen für die Methoden Read(Byte[], Int32, Int32) und Write(Byte[], Int32, Int32) bereitstellen. Die asynchronen ReadAsync(Byte[], Int32, Int32) Methoden , und verwenden die WriteAsync(Byte[], Int32, Int32) CopyToAsync(Stream) synchronen Methoden und in ihren Read(Byte[], Int32, Int32) Write(Byte[], Int32, Int32) Implementierungen. Daher funktionieren Ihre Implementierungen von Read(Byte[], Int32, Int32) und ordnungsgemäß mit den Write(Byte[], Int32, Int32) asynchronen Methoden. Die Standardimplementierung ReadByte() von und erstellen ein neues Einzelelement-Bytearray, und rufen Dann Ihre WriteByte(Byte) Implementierungen von und Read(Byte[], Int32, Int32) Write(Byte[], Int32, Int32) auf. Wenn Sie von ableiten, wird empfohlen, diese Methoden für den Zugriff auf Ihren internen Puffer zu überschreiben, falls sie über einen verfügen, um Stream eine wesentlich bessere Leistung zu erzielen. Sie müssen auch Implementierungen von CanRead , , , , , , und CanSeek CanWrite Flush() Length Position Seek(Int64, SeekOrigin) SetLength(Int64) bereitstellen.
Überschreiben Sie die Close() -Methode nicht, sondern legen Sie die Stream bereinigte Logik in der -Methode Dispose(Boolean) ab. Weitere Informationen finden Sie unter Implementieren einer Dispose-Methode.
Konstruktoren
| Stream() |
Initialisiert eine neue Instanz der Stream-Klasse. |
Felder
| Null |
Ein |
Eigenschaften
| CanRead |
Ruft beim Überschreiben in einer abgeleiteten Klasse einen Wert ab, der angibt, ob der aktuelle Stream Lesevorgänge unterstützt. |
| CanSeek |
Ruft beim Überschreiben in einer abgeleiteten Klasse einen Wert ab, der angibt, ob der aktuelle Stream Suchvorgänge unterstützt. |
| CanTimeout |
Ruft einen Wert ab, der bestimmt, ob für den aktuellen Stream ein Timeout möglich ist. |
| CanWrite |
Ruft beim Überschreiben in einer abgeleiteten Klasse einen Wert ab, der angibt, ob der aktuelle Stream Schreibvorgänge unterstützt. |
| Length |
Ruft beim Überschreiben in einer abgeleiteten Klasse die Länge des Streams in Bytes ab. |
| Position |
Ruft beim Überschreiben in einer abgeleiteten Klasse die Position im aktuellen Stream ab oder legt diese fest. |
| ReadTimeout |
Ruft einen Wert in Millisekunden ab, der bestimmt, wie lange der Stream versucht, Lesevorgänge durchzuführen, bevor ein Timeout auftritt, oder legt diesen fest. |
| WriteTimeout |
Ruft einen Wert in Millisekunden ab, der bestimmt, wie lange der Stream versucht, Schreibvorgänge durchzuführen, bevor ein Timeout auftritt, oder legt diesen fest. |
Methoden
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Beginnt einen asynchronen Lesevorgang. (Verwenden Sie stattdessen ReadAsync(Byte[], Int32, Int32).) |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Beginnt einen asynchronen Schreibvorgang. (Verwenden Sie stattdessen WriteAsync(Byte[], Int32, Int32).) |
| Close() |
Schließt den aktuellen Stream und gibt alle dem aktuellen Stream zugeordneten Ressourcen frei (z. B. Sockets und Dateihandles). Anstatt diese Methode aufzurufen, stellen Sie sicher, dass der Stream ordnungsgemäß freigegeben wird. |
| CopyTo(Stream) |
Liest alle Bytes aus dem aktuellen Stream und schreibt sie in einen anderen Datenstrom. |
| CopyTo(Stream, Int32) |
Liest alles Bytes aus dem aktuellen Datenstrom und schreibt sie unter Verwendung einer angegebenen Puffergröße in einen anderen Datenstrom. |
| CopyToAsync(Stream) |
Liest die Bytes asynchron aus dem aktuellen Stream und schreibt sie in einen anderen Stream. |
| CopyToAsync(Stream, CancellationToken) |
Liest die Bytes asynchron aus dem aktuellen Stream und schreibt sie unter Verwendung eines angegebenen Abbruchtokens in einen anderen Stream. |
| CopyToAsync(Stream, Int32) |
Liest die Bytes asynchron aus dem aktuellen Stream und schreibt sie unter Verwendung einer angegebenen Puffergröße in einen anderen Stream. |
| CopyToAsync(Stream, Int32, CancellationToken) |
Liest die Bytes asynchron aus dem aktuellen Stream und schreibt sie unter Verwendung einer angegebenen Puffergröße und eines Abbruchtokens in einen anderen Stream. |
| CreateObjRef(Type) |
Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind. (Geerbt von MarshalByRefObject) |
| CreateWaitHandle() |
Veraltet.
Veraltet.
Reserviert ein WaitHandle-Objekt. |
| Dispose() |
Gibt alle vom Stream verwendeten Ressourcen frei. |
| Dispose(Boolean) |
Gibt die von Stream verwendeten nicht verwalteten Ressourcen und optional die verwalteten Ressourcen frei. |
| DisposeAsync() |
Gibt die nicht verwalteten Ressourcen, die von der Stream verwendet werden, asynchron frei. |
| EndRead(IAsyncResult) |
Wartet, bis der ausstehende asynchrone Lesevorgang abgeschlossen ist. (Verwenden Sie stattdessen ReadAsync(Byte[], Int32, Int32).) |
| EndWrite(IAsyncResult) |
Beendet einen asynchronen Schreibvorgang. (Verwenden Sie stattdessen WriteAsync(Byte[], Int32, Int32).) |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
| Flush() |
Löscht beim Überschreiben in einer abgeleiteten Klasse alle Puffer für diesen Stream und veranlasst die Ausgabe aller gepufferten Daten an das zugrunde liegende Gerät. |
| FlushAsync() |
Löscht sämtliche Puffer für diesen Stream asynchron und veranlasst die Ausgabe aller gepufferten Daten an das zugrunde liegende Gerät. |
| FlushAsync(CancellationToken) |
Löscht alle Puffer für diesen Stream asynchron und veranlasst die Ausgabe aller gepufferten Daten an das zugrunde liegende Gerät und überwacht Abbruchanforderungen. |
| GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
| GetLifetimeService() |
Veraltet.
Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert. (Geerbt von MarshalByRefObject) |
| GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
| InitializeLifetimeService() |
Veraltet.
Ruft ein Lebensdauerdienstobjekt zur Steuerung der Lebensdauerrichtlinie für diese Instanz ab. (Geerbt von MarshalByRefObject) |
| MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
| MemberwiseClone(Boolean) |
Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts. (Geerbt von MarshalByRefObject) |
| ObjectInvariant() |
Veraltet.
Bietet Unterstützung für einen Contract. |
| Read(Byte[], Int32, Int32) |
Liest beim Überschreiben in einer abgeleiteten Klasse eine Folge von Bytes aus dem aktuellen Stream und erhöht die Position im Stream um die Anzahl der gelesenen Bytes. |
| Read(Span<Byte>) |
Liest beim Überschreiben in einer abgeleiteten Klasse eine Folge von Bytes aus dem aktuellen Stream und erhöht die Position im Stream um die Anzahl der gelesenen Bytes. |
| ReadAsync(Byte[], Int32, Int32) |
Liest eine Bytesequenz asynchron aus dem aktuellen Stream und setzt die Position in diesem Stream um die Anzahl der gelesenen Bytes nach vorn. |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Liest eine Folge von Bytes asynchron aus aktuellen Stream, erhöht die Position im Stream um die Anzahl der gelesenen Bytes und überwacht Abbruchanfragen. |
| ReadAsync(Memory<Byte>, CancellationToken) |
Liest eine Folge von Bytes asynchron aus aktuellen Stream, erhöht die Position im Stream um die Anzahl der gelesenen Bytes und überwacht Abbruchanfragen. |
| ReadByte() |
Liest ein Byte aus dem Stream und erhöht die Position im Stream um ein Byte, oder gibt -1 zurück, wenn das Ende des Streams erreicht ist. |
| Seek(Int64, SeekOrigin) |
Legt beim Überschreiben in einer abgeleiteten Klasse die Position im aktuellen Stream fest. |
| SetLength(Int64) |
Legt beim Überschreiben in einer abgeleiteten Klasse die Länge des aktuellen Streams fest. |
| Synchronized(Stream) |
Erstellt um das angegebene Stream-Objekt einen threadsicheren (synchronisierten) Wrapper. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
| ValidateBufferArguments(Byte[], Int32, Int32) |
Überprüft Argumente, die zum Lesen und Schreiben von Methoden in bereitgestellt Stream werden. |
| ValidateCopyToArguments(Stream, Int32) |
Überprüft argumente, die für die - oder -Methode bereitgestellt CopyTo(Stream, Int32) CopyToAsync(Stream, Int32, CancellationToken) werden. |
| Write(Byte[], Int32, Int32) |
Schreibt beim Überschreiben in einer abgeleiteten Klasse eine Folge von Bytes in den aktuellen Stream und erhöht die aktuelle Position im Stream um die Anzahl der geschriebenen Bytes. |
| Write(ReadOnlySpan<Byte>) |
Schreibt beim Überschreiben in einer abgeleiteten Klasse eine Folge von Bytes in den aktuellen Stream und erhöht die aktuelle Position im Stream um die Anzahl der geschriebenen Bytes. |
| WriteAsync(Byte[], Int32, Int32) |
Schreibt eine Bytesequenz asynchron in den aktuellen Stream und setzt die aktuelle Position in diesem Stream um die Anzahl der geschriebenen Bytes nach vorn. |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Schreibt beim Überschreiben in einer abgeleiteten Klasse eine Folge von Bytes asynchron in den aktuellen Stream und erhöht die aktuelle Position im Stream um die Anzahl der geschriebenen Bytes und überwacht Abbruchanforderungen. |
| WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Schreibt beim Überschreiben in einer abgeleiteten Klasse eine Folge von Bytes asynchron in den aktuellen Stream und erhöht die aktuelle Position im Stream um die Anzahl der geschriebenen Bytes und überwacht Abbruchanforderungen. |
| WriteByte(Byte) |
Schreibt ein Byte an die aktuellen Position im Stream und erhöht die aktuelle Position im Stream um ein Byte. |
Explizite Schnittstellenimplementierungen
| IDisposable.Dispose() |
Gibt alle vom Stream verwendeten Ressourcen frei. |
Erweiterungsmethoden
| AsInputStream(Stream) |
Konvertiert einen verwalteten Stream in .NET für Microsoft Store-Apps in einen Eingabestream in der Windows-Runtime. |
| AsOutputStream(Stream) |
Konvertiert einen verwalteten Stream in .NET für Microsoft Store-Apps in einen Ausgabestream in der Windows-Runtime. |
| AsRandomAccessStream(Stream) |
Konvertiert den angegebenen Stream in einen Random-Access-Stream. |
| ConfigureAwait(IAsyncDisposable, Boolean) |
Konfiguriert, wie Wartezeiten auf die Aufgaben angewandt werden, die von einem asynchronen verwerfbaren Element zurückgegeben werden. |