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 zum asynchronen Kopieren der Dateien aus einem Verzeichnis in ein anderes Verzeichnis verwenden. 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 Datenströme. 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 ihre abgeleiteten Klassen bieten eine allgemeine Ansicht dieser verschiedenen Arten von Eingaben und Ausgabe, und isolieren Sie den Programmierer aus den spezifischen Details des Betriebssystems und der zugrunde liegenden Geräte.

Streams 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 Array von Bytes.

  • 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. Die 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. Netzwerkdatenströme haben beispielsweise kein einheitliches Konzept einer aktuellen Position und unterstützen daher in der Regel nicht die Suche.

Einige der häufiger verwendeten Datenströme, die von ihnen erben Stream , sind FileStreamund MemoryStream.

Abhängig von der zugrunde liegenden Datenquelle oder dem Repository unterstützen Datenströme möglicherweise nur einige dieser Funktionen. Sie können einen Datenstrom mit den Eigenschaften der Klasse und CanSeek den CanWriteCanReadEigenschaften der Stream Klasse abfragen.

Die Read Und Methoden lesen und Write schreiben Daten in einer Vielzahl von Formaten. Verwenden Sie für Datenströme, die die Suche unterstützen, die Methoden und die Length Position Eigenschaften, um die Seek SetLength 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 Löschen eines Stream Objekts werden alle pufferten Daten geleert, und im Wesentlichen wird die Flush Methode für Sie aufgerufen. Dispose gibt auch Betriebssystemressourcen wie Dateiziehpunkte, 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 dem .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 I/O-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 await in Visual Basic und C# verwendet.

Wenn Sie in einer Windows 8.x-Store-App verwendet werden, Stream sind zwei Erweiterungsmethoden enthalten: AsInputStream und AsOutputStream. Diese Methoden konvertieren ein Stream Objekt in einen Datenstrom im Windows-Runtime. Sie können auch einen Datenstrom in der Windows-Runtime mithilfe der AsStreamForRead methoden AsStreamForWrite 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 aus, um die Leistung zu verbessern. Für solche Datenströme können Sie die Flush Methode FlushAsync verwenden, um interne Puffer zu löschen und sicherzustellen, dass alle Daten in die zugrunde liegende Datenquelle oder das Repository geschrieben wurden.

Wenn Sie einen Datenstrom 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 Streamimplementieren, müssen Sie Implementierungen für die Read(Byte[], Int32, Int32) und Write(Byte[], Int32, Int32) methoden bereitstellen. Die asynchronen Methoden , WriteAsync(Byte[], Int32, Int32)und verwenden Sie die synchronen Methoden Read(Byte[], Int32, Int32) ReadAsync(Byte[], Int32, Int32)und Write(Byte[], Int32, Int32) in ihren ImplementierungenCopyToAsync(Stream). Daher funktionieren Ihre Implementierungen von und Write(Byte[], Int32, Int32) funktionieren ordnungsgemäß mit den asynchronen Read(Byte[], Int32, Int32) Methoden. Die Standardimplementierungen von ReadByte() und WriteByte(Byte) erstellen ein neues Bytearray mit einem einzelnen Element, und rufen Sie dann Ihre Implementierungen auf Read(Byte[], Int32, Int32) und Write(Byte[], Int32, Int32)rufen Sie sie auf. Wenn Sie von diesem Streamabgeleitet werden, empfehlen wir, diese Methoden außer Kraft zu setzen, um auf Ihren internen Puffer zuzugreifen, wenn Sie einen haben, um eine wesentlich bessere Leistung zu erzielen. Sie müssen auch Implementierungen von CanRead, CanSeek, LengthFlush()PositionCanWrite, Seek(Int64, SeekOrigin)und .SetLength(Int64)

Überschreiben Sie die Close() Methode nicht, sondern setzen Sie alle Stream Bereinigungslogik in die Dispose(Boolean) Methode. 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 Datenströme werden durch 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 Datenströme werden durch die Anzahl der kopierten Bytes erweitert.

CopyToAsync(Stream)

Liest die Bytes asynchron aus dem aktuellen Stream und schreibt sie in einen anderen Stream. Beide Datenströme werden durch 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 Datenströme werden durch 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 Datenströme werden durch 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 Datenströme werden durch 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.

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

ValidateCopyToArguments(Stream, Int32)

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