Stream Klas

Definitie

Biedt een algemene weergave van een reeks bytes. Dit is een abstracte klasse.

public ref class Stream abstract : IDisposable
public ref class Stream abstract : MarshalByRefObject, IDisposable
public ref class Stream abstract : MarshalByRefObject, IAsyncDisposable, IDisposable
public abstract class Stream : IDisposable
[System.Serializable]
public abstract class Stream : MarshalByRefObject, IDisposable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Stream : MarshalByRefObject, IDisposable
public abstract class Stream : MarshalByRefObject, IDisposable
public abstract class Stream : MarshalByRefObject, IAsyncDisposable, IDisposable
type Stream = class
    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
type Stream = class
    inherit MarshalByRefObject
    interface IDisposable
type Stream = class
    inherit MarshalByRefObject
    interface IAsyncDisposable
    interface IDisposable
Public MustInherit Class Stream
Implements IDisposable
Public MustInherit Class Stream
Inherits MarshalByRefObject
Implements IDisposable
Public MustInherit Class Stream
Inherits MarshalByRefObject
Implements IAsyncDisposable, IDisposable
Overname
Stream
Overname
Afgeleid
Kenmerken
Implementeringen

Voorbeelden

In het volgende voorbeeld ziet u hoe u twee FileStream objecten gebruikt om de bestanden asynchroon te kopiëren van de ene map naar een andere map. De FileStream klasse is afgeleid van de Stream klasse. Merk op dat de Click gebeurtenis-handler voor het Button besturingselement is gemarkeerd met de async modifier omdat deze een asynchrone methode aanroept.

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

Opmerkingen

Stream is de abstracte basisklasse van alle streams. Een stroom is een abstractie van een reeks bytes, zoals een bestand, een invoer-/uitvoerapparaat, een communicatiepijp tussen processen of een TCP/IP-socket. De Stream klasse en de afgeleide klassen bieden een algemene weergave van deze verschillende typen invoer en uitvoer, en isoleren de programmeur van de specifieke details van het besturingssysteem en de onderliggende apparaten.

Streams omvatten drie fundamentele bewerkingen:

  • U kunt lezen uit streams. Lezen is de overdracht van gegevens uit een stroom naar een gegevensstructuur, zoals een matrix van bytes.

  • U kunt schrijven naar streams. Schrijven is de overdracht van gegevens uit een gegevensstructuur in een stroom.

  • Streams kunnen zoeken ondersteunen. Het zoeken naar query's en het wijzigen van de huidige positie binnen een stroom. De functie Zoeken is afhankelijk van het soort back-uparchief dat een stream heeft. Netwerkstromen hebben bijvoorbeeld geen geïntegreerd concept van een huidige positie en bieden daarom meestal geen ondersteuning voor zoeken.

Enkele van de meestgebruikte streams waaruit ze overnemen Stream , zijn FileStream, en MemoryStream.

Afhankelijk van de onderliggende gegevensbron of opslagplaats kunnen streams slechts enkele van deze mogelijkheden ondersteunen. U kunt een stream opvragen voor de mogelijkheden ervan met behulp van de CanRead, CanWriteen CanSeek eigenschappen van de Stream klasse.

De Read en Write methoden lezen en schrijven gegevens in verschillende indelingen. Voor streams die ondersteuning bieden voor het zoeken, gebruiken van de Seek en SetLength methoden en eigenschappen PositionLength om de huidige positie en lengte van een stroom op te vragen en te wijzigen.

Met dit type wordt de IDisposable interface geïmplementeerd. Wanneer u klaar bent met het gebruik van het type, moet u het direct of indirect verwijderen. Als u het type rechtstreeks wilt verwijderen, roept u de Dispose methode aan in een try/catch blok. Als u deze indirect wilt verwijderen, gebruikt u een taalconstructie zoals using (in C#) of Using (in Visual Basic). Zie de sectie 'Using an Object that Implements IDisposable' (Een object gebruiken dat IDisposable implementeert) in het IDisposable interfaceonderwerp voor meer informatie.

Als u een Stream object opstelt, worden alle gebufferde gegevens leeggemaakt en wordt de Flush methode voor u in wezen aangeroepen. Dispose publiceert ook besturingssysteemresources, zoals bestandsingangen, netwerkverbindingen of geheugen die worden gebruikt voor interne buffering. De BufferedStream klasse biedt de mogelijkheid om een gebufferde stroom rond een andere stroom te verpakken om de lees- en schrijfprestaties te verbeteren.

Vanaf het .NET Framework 4.5 bevat de klasse Stream asynchrone methoden om asynchrone bewerkingen te vereenvoudigen. Een asynchrone methode bevat Async de naam, zoals ReadAsync, WriteAsyncen CopyToAsyncFlushAsync. Met deze methoden kunt u resource-intensieve I/O-bewerkingen uitvoeren zonder de hoofdthread te blokkeren. Deze prestatieoverweging is met name belangrijk in een Windows 8.x Store-app of -desktop-app, waarbij een tijdrovende streambewerking de UI-thread kan blokkeren en uw app kan weergeven alsof deze niet werkt. De asynchrone methoden worden gebruikt in combinatie met de trefwoorden async en await in Visual Basic en C#.

Wanneer Stream wordt gebruikt in een Windows 8.x Store-app, zijn er twee uitbreidingsmethoden opgenomen: AsInputStream en AsOutputStream. Met deze methoden wordt een Stream-object geconverteerd naar een stroom in de Windows Runtime. U kunt ook een stroom in de Windows Runtime converteren naar een Stream-object met behulp van de methoden AsStreamForRead en AsStreamForWrite. Zie How to: Convert Between .NET Framework Streams and Windows Runtime Streams voor meer informatie.

Sommige stream-implementaties voeren lokale buffering van de onderliggende gegevens uit om de prestaties te verbeteren. Voor dergelijke streams kunt u de Flush of FlushAsync methode gebruiken om interne buffers te wissen en ervoor te zorgen dat alle gegevens naar de onderliggende gegevensbron of opslagplaats zijn geschreven.

Als u een stream zonder back-uparchief nodig hebt (ook wel een bit bucket genoemd), gebruikt u het Null veld om een exemplaar van een stream op te halen dat voor dit doel is ontworpen.

Notities voor uitvoerders

Wanneer u een afgeleide klasse Streamimplementeert, moet u implementaties voor de Read(Byte[], Int32, Int32) en Write(Byte[], Int32, Int32) methoden opgeven. De asynchrone methoden ReadAsync(Byte[], Int32, Int32)en WriteAsync(Byte[], Int32, Int32)CopyToAsync(Stream) gebruiken de synchrone methoden Read(Byte[], Int32, Int32) en Write(Byte[], Int32, Int32) in hun implementaties. Daarom werken uw implementaties van Read(Byte[], Int32, Int32) en Write(Byte[], Int32, Int32) werken ze correct met de asynchrone methoden. De standaard implementaties van en WriteByte(Byte) het maken van ReadByte() een nieuwe bytematrix met één element en roepen vervolgens uw implementaties van Read(Byte[], Int32, Int32) en Write(Byte[], Int32, Int32). Wanneer u afgeleid bent van Stream, raden we u aan deze methoden te overschrijven om toegang te krijgen tot uw interne buffer, als u er een hebt, voor aanzienlijk betere prestaties. U moet ook implementaties van , , , , Flush(), Length, , Position, en Seek(Int64, SeekOrigin). SetLength(Int64). CanWriteCanSeekCanRead

Overschrijf in plaats daarvan niet alle Close()Stream opschoonlogica in de Dispose(Boolean) methode. Zie Een verwijderingsmethode implementeren voor meer informatie.

Constructors

Name Description
Stream()

Initialiseert een nieuw exemplaar van de Stream klasse.

Velden

Name Description
Null

Een Stream zonder backing store.

Eigenschappen

Name Description
CanRead

Wanneer deze wordt overschreven in een afgeleide klasse, haalt u een waarde op die aangeeft of de huidige stroom het lezen ondersteunt.

CanSeek

Wanneer deze wordt overschreven in een afgeleide klasse, krijgt u een waarde die aangeeft of de huidige stroom het zoeken ondersteunt.

CanTimeout

Hiermee wordt een waarde opgehaald die bepaalt of er een time-out optreedt voor de huidige stroom.

CanWrite

Wanneer deze wordt overschreven in een afgeleide klasse, krijgt u een waarde die aangeeft of de huidige stroom het schrijven ondersteunt.

Length

Wanneer deze wordt overschreven in een afgeleide klasse, wordt de lengte in bytes van de stream opgevraagd.

Position

Wanneer deze wordt overschreven in een afgeleide klasse, haalt of stelt u de positie in de huidige stroom in.

ReadTimeout

Hiermee wordt een waarde opgehaald of ingesteld, in milliseconden, die bepaalt hoe lang de stroom probeert te lezen voordat er een time-out optreedt.

WriteTimeout

Hiermee wordt een waarde opgehaald of ingesteld, in milliseconden, die bepaalt hoe lang de stream probeert te schrijven voordat er een time-out optreedt.

Methoden

Name Description
BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Begint een asynchrone leesbewerking. (Overweeg in plaats daarvan om te gebruiken ReadAsync(Byte[], Int32, Int32) .)

BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Hiermee wordt een asynchrone schrijfbewerking gestart. (Overweeg in plaats daarvan om te gebruiken WriteAsync(Byte[], Int32, Int32) .)

Close()

Hiermee sluit u de huidige stroom en worden alle resources (zoals sockets en bestandsingangen) die aan de huidige stroom zijn gekoppeld, vrijgegeven. In plaats van deze methode aan te roepen, moet u ervoor zorgen dat de stream correct wordt verwijderd.

CopyTo(Stream, Int32)

Leest de bytes uit de huidige stream en schrijft ze naar een andere stroom, met behulp van een opgegeven buffergrootte. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

CopyTo(Stream)

Leest de bytes uit de huidige stream en schrijft ze naar een andere stream. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

CopyToAsync(Stream, CancellationToken)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stream met behulp van een opgegeven annuleringstoken. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

CopyToAsync(Stream, Int32, CancellationToken)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stroom, met behulp van een opgegeven buffergrootte en annuleringstoken. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

CopyToAsync(Stream, Int32)

Asynchroon leest de bytes uit de huidige stream en schrijft deze naar een andere stroom, met behulp van een opgegeven buffergrootte. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

CopyToAsync(Stream)

Asynchroon leest de bytes uit de huidige stream en schrijft ze naar een andere stream. Beide streamsposities worden geavanceerd door het aantal gekopieerde bytes.

CreateObjRef(Type)

Hiermee maakt u een object dat alle relevante informatie bevat die nodig is om een proxy te genereren die wordt gebruikt om te communiceren met een extern object.

(Overgenomen van MarshalByRefObject)
CreateWaitHandle()
Verouderd.

Wijst een WaitHandle object toe.

Dispose()

Alle resources die worden gebruikt door de Stream.

Dispose(Boolean)

Publiceert de niet-beheerde resources die worden gebruikt door de Stream beheerde resources en brengt eventueel de beheerde resources vrij.

DisposeAsync()

Geeft asynchroon de onbeheerde resources vrij die worden gebruikt door de Stream.

EndRead(IAsyncResult)

Wacht totdat de asynchrone leesbewerking is voltooid. (Overweeg in plaats daarvan om te gebruiken ReadAsync(Byte[], Int32, Int32) .)

EndWrite(IAsyncResult)

Hiermee wordt een asynchrone schrijfbewerking beëindigd. (Overweeg in plaats daarvan om te gebruiken WriteAsync(Byte[], Int32, Int32) .)

Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
Flush()

Wanneer deze wordt overschreven in een afgeleide klasse, wist u alle buffers voor deze stroom en zorgt u ervoor dat eventuele gebufferde gegevens naar het onderliggende apparaat worden geschreven.

FlushAsync()

Asynchroon wist alle buffers voor deze stroom en zorgt ervoor dat eventuele gebufferde gegevens naar het onderliggende apparaat worden geschreven.

FlushAsync(CancellationToken)

Asynchroon wist alle buffers voor deze stroom, zorgt ervoor dat gebufferde gegevens naar het onderliggende apparaat worden geschreven en annuleringsaanvragen worden gecontroleerd.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetLifetimeService()

Hiermee haalt u het huidige levensduurserviceobject op waarmee het levensduurbeleid voor dit exemplaar wordt beheerd.

(Overgenomen van MarshalByRefObject)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
InitializeLifetimeService()

Hiermee haalt u een levensduurserviceobject op om het levensduurbeleid voor dit exemplaar te beheren.

(Overgenomen van MarshalByRefObject)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
MemberwiseClone(Boolean)

Hiermee maakt u een ondiepe kopie van het huidige MarshalByRefObject object.

(Overgenomen van MarshalByRefObject)
ObjectInvariant()
Verouderd.

Biedt ondersteuning voor een Contract.

Read(Byte[], Int32, Int32)

Wanneer deze wordt overschreven in een afgeleide klasse, leest u een reeks bytes uit de huidige stroom en wordt de positie binnen de stream verplaatst door het aantal gelezen bytes.

Read(Span<Byte>)

Wanneer deze wordt overschreven in een afgeleide klasse, leest u een reeks bytes uit de huidige stroom en wordt de positie binnen de stream verplaatst door het aantal gelezen bytes.

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

Asynchroon leest een reeks bytes uit de huidige stroom, verplaatst de positie binnen de stream door het aantal gelezen bytes en bewaakt annuleringsaanvragen.

ReadAsync(Byte[], Int32, Int32)

Asynchroon leest een reeks bytes uit de huidige stroom en wordt de positie binnen de stream verplaatst door het aantal gelezen bytes.

ReadAsync(Memory<Byte>, CancellationToken)

Asynchroon leest een reeks bytes uit de huidige stroom, verplaatst de positie binnen de stream door het aantal gelezen bytes en bewaakt annuleringsaanvragen.

ReadByte()

Hiermee leest u een byte uit de stroom en wordt de positie binnen de stream met één byte vooruit gelezen of wordt -1 geretourneerd als aan het einde van de stream.

Seek(Int64, SeekOrigin)

Wanneer deze wordt overschreven in een afgeleide klasse, stelt u de positie in de huidige stroom in.

SetLength(Int64)

Wanneer deze wordt overschreven in een afgeleide klasse, stelt u de lengte van de huidige stroom in.

Synchronized(Stream)

Hiermee maakt u een thread-safe (gesynchroniseerde) wrapper rond het opgegeven Stream object.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)
Write(Byte[], Int32, Int32)

Wanneer deze wordt overschreven in een afgeleide klasse, schrijft u een reeks bytes naar de huidige stroom en wordt de huidige positie binnen deze stroom verplaatst met het aantal geschreven bytes.

Write(ReadOnlySpan<Byte>)

Wanneer deze wordt overschreven in een afgeleide klasse, schrijft u een reeks bytes naar de huidige stroom en wordt de huidige positie binnen deze stroom verplaatst met het aantal geschreven bytes.

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

Asynchroon schrijft een reeks bytes naar de huidige stroom, verplaatst de huidige positie binnen deze stream door het aantal geschreven bytes en bewaakt annuleringsaanvragen.

WriteAsync(Byte[], Int32, Int32)

Asynchroon schrijft een reeks bytes naar de huidige stroom en wordt de huidige positie binnen deze stroom verplaatst door het aantal geschreven bytes.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Asynchroon schrijft een reeks bytes naar de huidige stroom, verplaatst de huidige positie binnen deze stream door het aantal geschreven bytes en bewaakt annuleringsaanvragen.

WriteByte(Byte)

Hiermee schrijft u een byte naar de huidige positie in de stroom en wordt de positie binnen de stream met één byte vooruit.

Expliciete interface-implementaties

Name Description
IDisposable.Dispose()

Alle resources die worden gebruikt door de Stream.

Extensiemethoden

Name Description
AsInputStream(Stream)

Converteert een beheerde stream in de .NET voor Windows Store-apps naar een invoerstroom in de Windows Runtime.

AsOutputStream(Stream)

Converteert een beheerde stream in de .NET voor Windows Store-apps naar een uitvoerstroom in de Windows Runtime.

AsRandomAccessStream(Stream)

Converteert de opgegeven stream naar een stream voor willekeurige toegang.

ConfigureAwait(IAsyncDisposable, Boolean)

Hiermee configureert u hoe wacht op de taken die worden geretourneerd op basis van een asynchroon wegwerp, worden uitgevoerd.

Van toepassing op

Zie ook