Stream Klasse

Definition

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 Sie zwei FileStream Objekte verwenden, um die Dateien asynchron aus einem Verzeichnis 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 Stream -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 liegenden Geräte.

Streams umfassen drei grundlegende Vorgänge:

  • Sie können aus Streams lesen. Lesen ist die Übertragung von Daten aus einem Stream in eine Datenstruktur, z. B. ein Array von Bytes.

  • Sie können in Streams schreiben. Schreiben ist die Übertragung von Daten aus einer Datenstruktur in einen Stream.

  • Streams können die Suche unterstützen. Suchen bezieht sich auf das Abfragen und Ändern der aktuellen Position in einem Stream. Die Suchfunktion hängt von der Art des Sicherungsspeichers ab, über den ein Stream verfügt. Netzwerkstreams haben beispielsweise kein einheitliches Konzept einer aktuellen Position und unterstützen daher in der Regel keine Suche.

Einige der am häufigsten verwendeten Streams, die von erben Stream , sind FileStream, und 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 nach seinen Funktionen abfragen, indem Sie die CanReadEigenschaften , CanWriteund CanSeek der Stream -Klasse verwenden.

Die Read Methoden und 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 und die Position Eigenschaften und Length , um die aktuelle Position und Länge eines Datenstroms abzufragen und zu ä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“.

Durch das Entfernen eines Stream Objekts werden alle gepufferten Daten geleert und im Wesentlichen die Flush -Methode für Sie aufgerufen. Dispose gibt auch Betriebssystemressourcen wie Dateihandles, Netzwerkverbindungen oder Arbeitsspeicher frei, die für interne Puffer verwendet werden. Die BufferedStream -Klasse bietet die Möglichkeit, einen gepufferten Stream um einen anderen Stream zu umschließen, um die Lese- und Schreibleistung zu verbessern.

Ab dem .NET Framework 4.5 enthält die Stream Klasse asynchrone Methoden, um asynchrone Vorgänge zu vereinfachen. Eine asynchrone Methode enthält Async in ihrem 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 Ü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 async Schlüsselwörtern und await in Visual Basic und C# verwendet.

Bei Verwendung in einer Windows 8.x Store-App Stream umfasst zwei Erweiterungsmethoden: AsInputStream und AsOutputStream. Diese Methoden konvertieren ein Stream Objekt in einen Stream im Windows-Runtime. Sie können einen Stream im Windows-Runtime auch mit den AsStreamForRead Methoden und AsStreamForWrite in ein Stream -Objekt konvertieren. Weitere Informationen finden Sie unter Vorgehensweise: Konvertieren zwischen .NET Framework Streams und 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-Methode FlushAsync 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 Stream ohne Sicherungsspeicher benötigen (auch als Bit-Bucket bezeichnet), verwenden Sie das Null Feld, um eine Instanz eines Datenstroms abzurufen, der für diesen Zweck konzipiert ist.

Hinweise für Ausführende

Wenn Sie eine abgeleitete Klasse von Streamimplementieren, müssen Sie Implementierungen für die Read(Byte[], Int32, Int32) Methoden und Write(Byte[], Int32, Int32) 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) ordnungsgemäß mit den asynchronen Methoden. Die Standardimplementierungen von ReadByte() und WriteByte(Byte) erstellen ein neues Einzelelement-Bytearray und rufen dann Ihre Implementierungen von Read(Byte[], Int32, Int32) und auf Write(Byte[], Int32, Int32). Wenn Sie von ableiten Stream, empfehlen wir Ihnen, diese Methoden zu überschreiben, um auf Ihren internen Puffer zuzugreifen, falls Sie über einen verfügen, um eine wesentlich bessere Leistung zu erzielen. Sie müssen auch Implementierungen von CanRead, , CanSeek, CanWriteFlush(), Length, , Position, Seek(Int64, SeekOrigin)und SetLength(Int64)bereitstellen.

Überschreiben Sie die Close() Methode nicht, sondern fügen Sie stattdessen die Stream gesamte Bereinigungslogik in die Dispose(Boolean) -Methode ein. Weitere Informationen finden Sie unter Implementieren einer Dispose-Methode.

Konstruktoren

Stream()

Initialisiert eine neue Instanz der Stream-Klasse.

Felder

Null

Ein Stream ohne Sicherungsspeicher.

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. Beide Datenstrompositionen werden um die Anzahl der kopierten Bytes erweitert.

CopyTo(Stream, Int32)

Liest alles Bytes aus dem aktuellen Datenstrom und schreibt sie unter Verwendung einer angegebenen Puffergröße in einen anderen Datenstrom. Beide Datenstrompositionen werden um die Anzahl der kopierten Bytes erweitert.

CopyToAsync(Stream)

Liest die Bytes asynchron aus dem aktuellen Stream und schreibt sie in einen anderen Stream. Beide Datenstrompositionen werden um die Anzahl der kopierten Bytes erweitert.

CopyToAsync(Stream, CancellationToken)

Liest die Bytes asynchron aus dem aktuellen Stream und schreibt sie unter Verwendung eines angegebenen Abbruchtokens in einen anderen Stream. Beide Datenstrompositionen werden um die Anzahl der kopierten Bytes erweitert.

CopyToAsync(Stream, Int32)

Liest die Bytes asynchron aus dem aktuellen Stream und schreibt sie unter Verwendung einer angegebenen Puffergröße in einen anderen Stream. Beide Datenstrompositionen werden um die Anzahl der kopierten Bytes erweitert.

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. Beide Datenstrompositionen werden um die Anzahl der kopierten Bytes erweitert.

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.
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.

ReadAtLeast(Span<Byte>, Int32, Boolean)

Liest mindestens eine Mindestanzahl von Bytes aus dem aktuellen Stream und erhöht 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 Stream, erhöht die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes und überwacht Abbruchanforderungen.

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.

ReadExactly(Byte[], Int32, Int32)

count Liest die Anzahl von Bytes aus dem aktuellen Stream und verschiebt die Position innerhalb des Datenstroms.

ReadExactly(Span<Byte>)

Liest Bytes aus dem aktuellen Stream und verschiebt die Position innerhalb des Datenstroms, bis der buffer gefüllt ist.

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

Liest count asynchron die Anzahl von Bytes aus dem aktuellen Stream, erhöht die Position innerhalb des Datenstroms und überwacht Abbruchanforderungen.

ReadExactlyAsync(Memory<Byte>, CancellationToken)

Liest Bytes asynchron aus dem aktuellen Stream, verschiekt die Position innerhalb des Datenstroms, bis der buffer gefüllt ist, und überwacht Abbruchanforderungen.

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 für Streambereitgestellt werden.

ValidateCopyToArguments(Stream, Int32)

Überprüft Argumente, die für die CopyTo(Stream, Int32) -Methode oder CopyToAsync(Stream, Int32, CancellationToken) -Methode bereitgestellt 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.

Gilt für

Siehe auch