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 generische Ansicht einer Bytesequenz 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 FileStream Objekte verwendet werden, um die Dateien asynchron aus einem Verzeichnis in ein anderes Verzeichnis zu kopieren. Die FileStream Klasse wird von der Stream Klasse abgeleitet. Beachten Sie, dass der Click Ereignishandler für das Button Steuerelement mit dem async Modifizierer gekennzeichnet ist, 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 Datenströme. Ein Datenstrom ist eine Abstraktion einer Bytesequenz, z. B. einer Datei, eines Eingabe-/Ausgabegeräts, einer prozessübergreifenden Kommunikationspipeline oder eines TCP/IP-Sockets. Die Stream Klasse und die abgeleiteten Klassen bieten eine generische Ansicht dieser verschiedenen Eingabe- und Ausgabetypen und isolieren den Programmierer anhand der spezifischen Details des Betriebssystems und der zugrunde liegenden Geräte.
Datenströme umfassen drei grundlegende Vorgänge:
Sie können aus Datenströmen lesen. Das Lesen ist die Übertragung von Daten aus einem Datenstrom in eine Datenstruktur, z. B. ein Bytearray.
Sie können in Datenströme schreiben. Das Schreiben ist die Übertragung von Daten aus einer Datenstruktur in einen Datenstrom.
Streams können die Suche unterstützen. Suche bezieht sich auf Abfragen und Ändern der aktuellen Position innerhalb eines Datenstroms. Die Suchfunktion hängt von der Art des Sicherungsspeichers ab, über den ein Datenstrom verfügt. Beispielsweise haben Netzwerkdatenströme kein einheitliches Konzept einer aktuellen Position und unterstützen daher in der Regel keine Suche.
Einige der häufiger verwendeten Datenströme, die Stream erben, sind FileStreamund MemoryStream.
Je nach zugrunde liegender Datenquelle oder Repository unterstützen Datenströme möglicherweise nur einige dieser Funktionen. Sie können einen Datenstrom nach seinen Funktionen abfragen, indem Sie die CanReadCanWriteEigenschaften und CanSeek Eigenschaften der Stream Klasse verwenden.
Die Read Methoden Write lesen und schreiben Daten in einer Vielzahl von Formaten. Verwenden Sie für Datenströme, die die Suche unterstützen, die Seek Methoden und SetLength Die PositionLength Eigenschaften, um die aktuelle Position und Länge eines Datenstroms abzufragen und zu ändern.
Dieser Typ implementiert die IDisposable Schnittstelle. Wenn Sie die Verwendung des Typs abgeschlossen haben, sollten Sie ihn entweder direkt oder indirekt verwerfen. Rufen Sie die Methode Dispose in einem try/catch-Block auf, um den Typ direkt zu entsorgen. Verwenden Sie zum indirekten Löschen ein Sprachkonstrukt wie using (in C#) oder Using (in Visual Basic). Weitere Informationen finden Sie im Abschnitt "Verwenden eines Objekts, das IDisposable implementiert" im IDisposable Schnittstellenthema.
Durch das Löschen eines Stream Objekts werden alle gepufferten Daten geleert, und im Wesentlichen wird die Flush Methode für Sie aufgerufen. Dispose gibt auch Betriebssystemressourcen wie Dateihandles, Netzwerkverbindungen oder Arbeitsspeicher frei, die für alle internen Puffer verwendet werden. Die BufferedStream Klasse bietet die Möglichkeit, einen gepufferten Datenstrom um einen anderen Datenstrom umzuschließen, um die Lese- und Schreibleistung zu verbessern.
Ab .NET Framework 4.5 enthält die Stream Klasse asynchrone Methoden, um asynchrone Vorgänge zu vereinfachen. Eine asynchrone Methode enthält Async ihren Namen, z ReadAsync. B. , , WriteAsync, CopyToAsyncund FlushAsync. Mit diesen Methoden können Sie ressourcenintensive E/A-Vorgänge ausführen, ohne den Hauptthread zu blockieren. Diese Leistungsüberlegung ist in einer Windows 8.x Store-App oder Desktop-App besonders wichtig, bei der ein zeitaufwendiger Streamvorgang den UI-Thread blockieren und ihre App so erscheinen lässt, als ob sie nicht funktioniert. Die asynchronen Methoden werden in Verbindung mit den Schlüsselwörtern async in Visual Basic und C# await verwendet.
Bei Verwendung in einer Windows 8.x Store-App Stream sind zwei Erweiterungsmethoden enthalten: AsInputStream und AsOutputStream. Diese Methoden konvertieren ein Stream Objekt in einen Datenstrom in der Windows-Runtime. Sie können einen Datenstrom in der Windows-Runtime auch mithilfe der und AsStreamForWrite der AsStreamForRead Methoden in ein Stream Objekt konvertieren. Weitere Informationen finden Sie unter How to: Convert Between .NET Framework Streams and Windows Runtime Streams
Einige Streamimplementierungen führen lokale Pufferung der zugrunde liegenden Daten durch, um die Leistung zu verbessern. Für solche Datenströme können Sie die Flush oder FlushAsync die Methode verwenden, um alle internen Puffer zu löschen und sicherzustellen, dass alle Daten in die zugrunde liegende Datenquelle oder das zugrunde liegende Repository geschrieben wurden.
Wenn Sie einen Datenstrom ohne Sicherungsspeicher (auch als Bit-Bucket bezeichnet) benötigen, verwenden Sie das Null Feld, um eine Instanz eines Datenstroms abzurufen, der für diesen Zweck entwickelt wurde.
Hinweise für Ausführende
Wenn Sie eine abgeleitete Klasse von Streamimplementieren, müssen Sie Implementierungen für die Read(Byte[], Int32, Int32) und Write(Byte[], Int32, Int32) Methoden bereitstellen. Die asynchronen Methoden ReadAsync(Byte[], Int32, Int32), WriteAsync(Byte[], Int32, Int32)und CopyToAsync(Stream) verwenden die synchronen Methoden Read(Byte[], Int32, Int32) und Write(Byte[], Int32, Int32) in ihren Implementierungen. Daher funktionieren Ihre Implementierungen von Read(Byte[], Int32, Int32) und Write(Byte[], Int32, Int32) funktionieren ordnungsgemäß mit den asynchronen Methoden. Die Standardimplementierungen von ReadByte() und WriteByte(Byte) erstellen ein neues Bytearray mit einem einzelnen Element, und rufen Sie dann Ihre Implementierungen von Read(Byte[], Int32, Int32) und auf Write(Byte[], Int32, Int32). Wenn Sie von Streamdieser Ableitung abgeleitet werden, empfehlen wir, diese Methoden außer Kraft zu setzen, um auf ihren internen Puffer zuzugreifen, falls vorhanden, um eine wesentlich bessere Leistung zu erzielen. Außerdem müssen Sie Implementierungen von CanRead, , CanSeek, CanWriteFlush(), , Length, Positionund Seek(Int64, SeekOrigin)SetLength(Int64).
Setzen Sie stattdessen nicht die Close()Stream gesamte Bereinigungslogik in die Dispose(Boolean) Methode außer Kraft. Weitere Informationen finden Sie unter Implementieren einer Dispose-Methode.
Konstruktoren
| Name | Beschreibung |
|---|---|
| Stream() |
Initialisiert eine neue Instanz der Stream-Klasse. |
Felder
| Name | Beschreibung |
|---|---|
| Null |
A |
Eigenschaften
| Name | Beschreibung |
|---|---|
| CanRead |
Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert abgerufen, der angibt, ob der aktuelle Datenstrom das Lesen unterstützt. |
| CanSeek |
Wenn eine abgeleitete Klasse überschrieben wird, wird ein Wert abgerufen, der angibt, ob der aktuelle Datenstrom die Suche unterstützt. |
| CanTimeout |
Ruft einen Wert ab, der bestimmt, ob der aktuelle Datenstrom Timeout ausführen kann. |
| CanWrite |
Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert abgerufen, der angibt, ob der aktuelle Datenstrom das Schreiben unterstützt. |
| Length |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, ruft die Länge in Bytes des Datenstroms ab. |
| Position |
Wenn sie in einer abgeleiteten Klasse außer Kraft gesetzt wird, ruft die Position innerhalb des aktuellen Datenstroms ab oder legt sie fest. |
| ReadTimeout |
Dient zum Abrufen oder Festlegen eines Werts in Millisekunden, der bestimmt, wie lange der Datenstrom vor dem Timeout zu lesen versucht. |
| WriteTimeout |
Dient zum Abrufen oder Festlegen eines Werts in Millisekunden, der bestimmt, wie lange der Datenstrom versucht, vor dem Timeout zu schreiben. |
Methoden
| Name | Beschreibung |
|---|---|
| BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) |
Startet einen asynchronen Lesevorgang. (Erwägen Sie stattdessen die Verwendung ReadAsync(Byte[], Int32, Int32) .) |
| BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) |
Startet einen asynchronen Schreibvorgang. (Erwägen Sie stattdessen die Verwendung WriteAsync(Byte[], Int32, Int32) .) |
| Close() |
Schließt den aktuellen Datenstrom und gibt alle Ressourcen (z. B. Sockets und Dateihandles) frei, die dem aktuellen Datenstrom zugeordnet sind. Anstatt diese Methode aufzurufen, stellen Sie sicher, dass der Datenstrom ordnungsgemäß verworfen ist. |
| CopyTo(Stream, Int32) |
Liest die Bytes aus dem aktuellen Datenstrom und schreibt sie mithilfe einer angegebenen Puffergröße in einen anderen Datenstrom. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. |
| CopyTo(Stream) |
Liest die Bytes aus dem aktuellen Datenstrom und schreibt sie in einen anderen Datenstrom. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. |
| CopyToAsync(Stream, CancellationToken) |
Liest die Bytes asynchron aus dem aktuellen Datenstrom und schreibt sie mithilfe eines angegebenen Abbruchtokens in einen anderen Datenstrom. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. |
| CopyToAsync(Stream, Int32, CancellationToken) |
Liest asynchron die Bytes aus dem aktuellen Datenstrom und schreibt sie in einen anderen Datenstrom, wobei eine angegebene Puffergröße und ein Abbruchtoken verwendet wird. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. |
| CopyToAsync(Stream, Int32) |
Liest die Bytes asynchron aus dem aktuellen Datenstrom und schreibt sie mithilfe einer angegebenen Puffergröße in einen anderen Datenstrom. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. |
| CopyToAsync(Stream) |
Liest die Bytes asynchron aus dem aktuellen Datenstrom und schreibt sie in einen anderen Datenstrom. Beide Datenströme werden um die Anzahl der kopierten Bytes erweitert. |
| CreateObjRef(Type) |
Erstellt ein Objekt, das alle relevanten Informationen enthält, die zum Generieren eines Proxys erforderlich sind, der für die Kommunikation mit einem Remoteobjekt verwendet wird. (Geerbt von MarshalByRefObject) |
| CreateWaitHandle() |
Veraltet.
Veraltet.
Veraltet.
Ordnet ein WaitHandle Objekt zu. |
| Dispose() |
Veröffentlicht alle ressourcen, die von der Stream. |
| Dispose(Boolean) |
Gibt die nicht verwalteten Ressourcen frei, die von den Stream verwalteten Ressourcen verwendet werden, und gibt optional die verwalteten Ressourcen frei. |
| DisposeAsync() |
Gibt asynchron die nicht verwalteten Ressourcen frei, die von der Stream. |
| EndRead(IAsyncResult) |
Wartet auf den Abschluss des ausstehenden asynchronen Lesevorgangs. (Erwägen Sie stattdessen die Verwendung ReadAsync(Byte[], Int32, Int32) .) |
| EndWrite(IAsyncResult) |
Beendet einen asynchronen Schreibvorgang. (Erwägen Sie stattdessen die Verwendung WriteAsync(Byte[], Int32, Int32) .) |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| Flush() |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, werden alle Puffer für diesen Datenstrom gelöscht und alle gepufferten Daten auf das zugrunde liegende Gerät geschrieben. |
| FlushAsync() |
Löscht asynchron alle Puffer für diesen Datenstrom und bewirkt, dass alle gepufferten Daten auf das zugrunde liegende Gerät geschrieben werden. |
| FlushAsync(CancellationToken) |
Löscht asynchron alle Puffer für diesen Datenstrom, bewirkt, dass alle gepufferten Daten auf das zugrunde liegende Gerät geschrieben werden, und überwacht Abbruchanforderungen. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetLifetimeService() |
Veraltet.
Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinie für diese Instanz steuert. (Geerbt von MarshalByRefObject) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| InitializeLifetimeService() |
Veraltet.
Ruft ein Lebensdauerdienstobjekt ab, um die Lebensdauerrichtlinie für diese Instanz zu steuern. (Geerbt von MarshalByRefObject) |
| MemberwiseClone() |
Erstellt eine flache Kopie der 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 ein Contract. |
| Read(Byte[], Int32, Int32) |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, liest sie eine Bytesequenz aus dem aktuellen Datenstrom und wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes. |
| Read(Span<Byte>) |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, liest sie eine Bytesequenz aus dem aktuellen Datenstrom und wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes. |
| ReadAsync(Byte[], Int32, Int32, CancellationToken) |
Liest asynchron eine Abfolge von Bytes aus dem aktuellen Datenstrom, wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes und überwacht Abbruchanforderungen. |
| ReadAsync(Byte[], Int32, Int32) |
Liest asynchron eine Abfolge von Bytes aus dem aktuellen Datenstrom und wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes. |
| ReadAsync(Memory<Byte>, CancellationToken) |
Liest asynchron eine Abfolge von Bytes aus dem aktuellen Datenstrom, wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes und überwacht Abbruchanforderungen. |
| ReadAtLeast(Span<Byte>, Int32, Boolean) |
Liest mindestens eine Minimale Anzahl von Bytes aus dem aktuellen Datenstrom und wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes. |
| ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken) |
Liest asynchron mindestens eine Mindestanzahl von Bytes aus dem aktuellen Datenstrom, wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes und überwacht Abbruchanforderungen. |
| ReadByte() |
Liest ein Byte aus dem Datenstrom und wechselt die Position innerhalb des Datenstroms um ein Byte oder gibt -1 zurück, wenn am Ende des Datenstroms. |
| ReadExactly(Byte[], Int32, Int32) |
Liest die Anzahl der Bytes aus dem aktuellen Datenstrom und wechselt die Position innerhalb des Datenstroms |
| ReadExactly(Span<Byte>) |
Liest Bytes aus dem aktuellen Datenstrom und wechselt die Position innerhalb des Datenstroms, bis die |
| ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Liest asynchron die Anzahl der Bytes aus dem aktuellen Datenstrom, wechselt die Position innerhalb des Datenstroms |
| ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Liest asynchron Bytes aus dem aktuellen Datenstrom, wechselt die Position innerhalb des Datenstroms, bis die |
| Seek(Int64, SeekOrigin) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird die Position innerhalb des aktuellen Datenstroms festgelegt. |
| SetLength(Int64) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird die Länge des aktuellen Datenstroms festgelegt. |
| Synchronized(Stream) |
Erstellt einen threadsicheren (synchronisierten) Wrapper um das angegebene Stream Objekt. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
| ValidateBufferArguments(Byte[], Int32, Int32) |
Überprüft die Argumente, die zum Lesen und Schreiben von Methoden Streambereitgestellt werden. |
| ValidateCopyToArguments(Stream, Int32) |
Überprüft die Argumente, die für die oder CopyToAsync(Stream, Int32, CancellationToken) die CopyTo(Stream, Int32) Methoden bereitgestellt werden. |
| Write(Byte[], Int32, Int32) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird eine Bytesequenz in den aktuellen Datenstrom geschrieben und die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes vorangestellt. |
| Write(ReadOnlySpan<Byte>) |
Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird eine Bytesequenz in den aktuellen Datenstrom geschrieben und die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes vorangestellt. |
| WriteAsync(Byte[], Int32, Int32, CancellationToken) |
Schreibt asynchron eine Bytesequenz in den aktuellen Datenstrom, wechselt die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes und überwacht Abbruchanforderungen. |
| WriteAsync(Byte[], Int32, Int32) |
Schreibt asynchron eine Bytesequenz in den aktuellen Datenstrom und wechselt die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes. |
| WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) |
Schreibt asynchron eine Bytesequenz in den aktuellen Datenstrom, wechselt die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes und überwacht Abbruchanforderungen. |
| WriteByte(Byte) |
Schreibt ein Byte in die aktuelle Position im Datenstrom und wechselt die Position innerhalb des Datenstroms um ein Byte. |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IDisposable.Dispose() |
Veröffentlicht alle ressourcen, die von der Stream. |
Erweiterungsmethoden
| Name | Beschreibung |
|---|---|
| AsInputStream(Stream) |
Konvertiert einen verwalteten Stream in .NET für Windows Store-Apps in einen Eingabedatenstrom in der Windows-Runtime. |
| AsOutputStream(Stream) |
Konvertiert einen verwalteten Stream in .NET für Windows Store-Apps in einen Ausgabedatenstrom in der Windows-Runtime. |
| AsRandomAccessStream(Stream) |
Konvertiert den angegebenen Datenstrom in einen Datenstrom mit wahllosem Zugriff. |
| ConfigureAwait(IAsyncDisposable, Boolean) |
Konfiguriert, wie auf die von einem asynchronen Einweg zurückgegebenen Aufgaben gewartet wird. |
| CopyToAsync(Stream, PipeWriter, CancellationToken) |
Liest die Bytes asynchron aus den Stream Und schreibt sie mithilfe eines Abbruchtokens in das angegebene PipeWriter. |