Stream Klass

Definition

Ger en allmän vy över en sekvens med byte. Det här är en abstrakt klass.

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
Arv
Stream
Arv
Härledda
Attribut
Implementeringar

Exempel

I följande exempel visas hur du använder två FileStream objekt för att asynkront kopiera filerna från en katalog till en annan katalog. Klassen FileStream härleds från Stream klassen. Observera att Click händelsehanteraren för Button kontrollen är markerad med async modifieraren eftersom den anropar en asynkron metod.

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

Kommentarer

Stream är den abstrakta basklassen för alla strömmar. En ström är en abstraktion av en sekvens med byte, till exempel en fil, en in-/utdataenhet, ett kommunikationsrör mellan processer eller en TCP/IP-socket. Klassen Stream och dess härledda klasser ger en allmän vy över dessa olika typer av indata och utdata och isolerar programmeraren från den specifika informationen om operativsystemet och de underliggande enheterna.

Strömmar omfattar tre grundläggande åtgärder:

  • Du kan läsa från strömmar. Läsning är överföring av data från en ström till en datastruktur, till exempel en matris med byte.

  • Du kan skriva till strömmar. Att skriva är överföringen av data från en datastruktur till en dataström.

  • Strömmar kan stödja sökning. Söker refererar till att fråga och ändra den aktuella positionen i en dataström. Sökfunktionen beror på vilken typ av lagringsplats en ström har. Nätverksströmmar har till exempel inget enhetligt koncept för en aktuell position och stöder därför vanligtvis inte sökning.

Några av de vanligaste strömmarna som ärver från Stream är FileStream, och MemoryStream.

Beroende på den underliggande datakällan eller lagringsplatsen kan strömmar endast ha stöd för vissa av dessa funktioner. Du kan fråga en dataström om dess funktioner med hjälp CanReadav egenskaperna Stream , CanWriteoch för CanSeek klassen.

Metoderna Read och Write läser och skriver data i olika format. För strömmar som stöder sökning använder Seek du metoderna och SetLength egenskaperna och PositionLength för att fråga efter och ändra aktuell position och längd för en dataström.

Den här typen implementerar IDisposable gränssnittet. När du har använt typen bör du kassera den på ett direkt eller indirekt sätt. Om du vill ta bort typen direkt anropar du dess Dispose metod i ett try/catch block. Om du vill ta bort det indirekt använder du en språkkonstruktion som using (i C#) eller Using (i Visual Basic). Mer information finns i avsnittet "Använda ett objekt som implementerar IDisposable" i IDisposable gränssnittet.

Om du tar bort ett Stream objekt rensas alla buffrade data och anropar Flush i princip metoden åt dig. Dispose släpper även operativsystemresurser som filhandtag, nätverksanslutningar eller minne som används för intern buffring. Klassen BufferedStream ger möjlighet att omsluta en buffrad ström runt en annan ström för att förbättra läs- och skrivprestanda.

Från och med .NET Framework 4.5 innehåller klassen Stream asynkrona metoder för att förenkla asynkrona åtgärder. En asynkron metod innehåller Async i namnet, till exempel ReadAsync, WriteAsync, CopyToAsyncoch FlushAsync. Med de här metoderna kan du utföra resursintensiva I/O-åtgärder utan att blockera huvudtråden. Den här prestandaöverväganden är särskilt viktig i en Windows 8.x Store-app eller skrivbordsapp där en tidskrävande strömåtgärd kan blockera användargränssnittstråden och få appen att se ut som om den inte fungerar. Asynkrona metoder används tillsammans med nyckelorden async och await i Visual Basic och C#.

När den används i en Windows 8.x Store-app innehåller Stream två tilläggsmetoder: AsInputStream och AsOutputStream. Dessa metoder konverterar ett Stream-objekt till en ström i Windows Runtime. Du kan också konvertera en ström i Windows Runtime till ett Stream-objekt med hjälp av metoderna AsStreamForRead och AsStreamForWrite. Mer information finns i How to: Convert Between .NET Framework Streams and Windows Runtime Streams

Vissa strömimplementeringar utför lokal buffring av underliggande data för att förbättra prestandan. För sådana strömmar kan du använda Flush metoden eller FlushAsync för att rensa eventuella interna buffertar och se till att alla data har skrivits till den underliggande datakällan eller lagringsplatsen.

Om du behöver en ström utan lagringsplats (kallas även en bit-bucket) använder du Null fältet för att hämta en instans av en dataström som är utformad för detta ändamål.

Anteckningar till implementerare

När du implementerar en härledd klass av Streammåste du tillhandahålla implementeringar för Read(Byte[], Int32, Int32) metoderna och Write(Byte[], Int32, Int32) . De asynkrona metoderna ReadAsync(Byte[], Int32, Int32), WriteAsync(Byte[], Int32, Int32)och CopyToAsync(Stream) använder synkrona metoder Read(Byte[], Int32, Int32) och Write(Byte[], Int32, Int32) i deras implementeringar. Därför fungerar dina implementeringar av Read(Byte[], Int32, Int32) och Write(Byte[], Int32, Int32) korrekt med de asynkrona metoderna. Standardimplementeringarna för ReadByte() och WriteByte(Byte) skapar en ny byte-matris med ett element och anropar sedan implementeringarna av Read(Byte[], Int32, Int32) och Write(Byte[], Int32, Int32). När du härleder från Streamrekommenderar vi att du åsidosätter dessa metoder för att få åtkomst till din interna buffert, om du har en, för betydligt bättre prestanda. Du måste också tillhandahålla implementeringar av CanRead, CanSeek, CanWrite, Flush(), Length, Position, Seek(Int64, SeekOrigin)och SetLength(Int64).

Åsidosätt Close() inte metoden, i stället lägger du all rensningslogik Stream i Dispose(Boolean) metoden. Mer information finns i Implementera en avyttringsmetod.

Konstruktorer

Name Description
Stream()

Initierar en ny instans av Stream klassen.

Fält

Name Description
Null

A Stream utan lagringsplats.

Egenskaper

Name Description
CanRead

När det åsidosätts i en härledd klass får du ett värde som anger om den aktuella strömmen stöder läsning.

CanSeek

När det åsidosätts i en härledd klass får du ett värde som anger om den aktuella strömmen stöder sökning.

CanTimeout

Hämtar ett värde som avgör om den aktuella strömmen kan överskrida tidsgränsen.

CanWrite

När det åsidosätts i en härledd klass får du ett värde som anger om den aktuella strömmen stöder skrivning.

Length

När det åsidosätts i en härledd klass hämtar du längden i byte av strömmen.

Position

När den åsidosätts i en härledd klass hämtar eller anger du positionen i den aktuella strömmen.

ReadTimeout

Hämtar eller anger ett värde i millisekunder som avgör hur länge strömmen ska försöka läsa innan tidsgränsen nås.

WriteTimeout

Hämtar eller anger ett värde i millisekunder som avgör hur länge strömmen ska försöka skriva innan tidsgränsen nås.

Metoder

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

Påbörjar en asynkron läsåtgärd. (Överväg att använda ReadAsync(Byte[], Int32, Int32) i stället.)

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

Påbörjar en asynkron skrivåtgärd. (Överväg att använda WriteAsync(Byte[], Int32, Int32) i stället.)

Close()

Stänger den aktuella strömmen och släpper alla resurser (till exempel socketar och filhandtag) som är associerade med den aktuella strömmen. I stället för att anropa den här metoden kontrollerar du att dataströmmen tas bort korrekt.

CopyTo(Stream, Int32)

Läser byteen från den aktuella strömmen och skriver dem till en annan ström med en angiven buffertstorlek. Båda strömmarnas positioner avanceras av antalet kopierade byte.

CopyTo(Stream)

Läser byteen från den aktuella strömmen och skriver dem till en annan ström. Båda strömmarnas positioner avanceras av antalet kopierade byte.

CopyToAsync(Stream, CancellationToken)

Läser asynkront byte från den aktuella strömmen och skriver dem till en annan ström med hjälp av en angiven annulleringstoken. Båda strömmarnas positioner avanceras av antalet kopierade byte.

CopyToAsync(Stream, Int32, CancellationToken)

Läser asynkront byte från den aktuella strömmen och skriver dem till en annan dataström med en angiven buffertstorlek och annulleringstoken. Båda strömmarnas positioner avanceras av antalet kopierade byte.

CopyToAsync(Stream, Int32)

Läser asynkront byte från den aktuella strömmen och skriver dem till en annan ström med en angiven buffertstorlek. Båda strömmarnas positioner avanceras av antalet kopierade byte.

CopyToAsync(Stream)

Läser asynkront byte från den aktuella strömmen och skriver dem till en annan ström. Båda strömmarnas positioner avanceras av antalet kopierade byte.

CreateObjRef(Type)

Skapar ett objekt som innehåller all relevant information som krävs för att generera en proxy som används för att kommunicera med ett fjärrobjekt.

(Ärvd från MarshalByRefObject)
CreateWaitHandle()
Föråldrad.

Allokerar ett WaitHandle objekt.

Dispose()

Släpper alla resurser som används av Stream.

Dispose(Boolean)

Släpper de ohanterade resurser som används av Stream och släpper eventuellt de hanterade resurserna.

DisposeAsync()

Asynkront släpper de ohanterade resurser som används av Stream.

EndRead(IAsyncResult)

Väntar på att den väntande asynkrona läsningen ska slutföras. (Överväg att använda ReadAsync(Byte[], Int32, Int32) i stället.)

EndWrite(IAsyncResult)

Avslutar en asynkron skrivåtgärd. (Överväg att använda WriteAsync(Byte[], Int32, Int32) i stället.)

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
Flush()

När de åsidosätts i en härledd klass rensar alla buffertar för den här strömmen och gör att buffrade data skrivs till den underliggande enheten.

FlushAsync()

Rensar asynkront alla buffertar för den här strömmen och gör att buffrade data skrivs till den underliggande enheten.

FlushAsync(CancellationToken)

Rensar asynkront alla buffertar för den här strömmen, gör att buffrade data skrivs till den underliggande enheten och övervakar begäranden om annullering.

GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetLifetimeService()

Hämtar det aktuella livslängdstjänstobjektet som styr livslängdsprincipen för den här instansen.

(Ärvd från MarshalByRefObject)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
InitializeLifetimeService()

Hämtar ett tjänstobjekt för livslängd för att styra livslängdsprincipen för den här instansen.

(Ärvd från MarshalByRefObject)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
MemberwiseClone(Boolean)

Skapar en ytlig kopia av det aktuella MarshalByRefObject objektet.

(Ärvd från MarshalByRefObject)
ObjectInvariant()
Föråldrad.

Tillhandahåller stöd för en Contract.

Read(Byte[], Int32, Int32)

När den åsidosätts i en härledd klass läser du en sekvens med byte från den aktuella strömmen och flyttar fram positionen i dataströmmen med antalet lästa byte.

Read(Span<Byte>)

När den åsidosätts i en härledd klass läser du en sekvens med byte från den aktuella strömmen och flyttar fram positionen i dataströmmen med antalet lästa byte.

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

Läser asynkront en sekvens med byte från den aktuella strömmen, avancerar positionen i strömmen med antalet lästa byte och övervakar begäranden om annullering.

ReadAsync(Byte[], Int32, Int32)

Läser asynkront en sekvens med byte från den aktuella strömmen och avancerar positionen i strömmen med antalet lästa byte.

ReadAsync(Memory<Byte>, CancellationToken)

Läser asynkront en sekvens med byte från den aktuella strömmen, avancerar positionen i strömmen med antalet lästa byte och övervakar begäranden om annullering.

ReadByte()

Läser en byte från strömmen och flyttar positionen i strömmen med en byte, eller returnerar -1 om i slutet av strömmen.

Seek(Int64, SeekOrigin)

När den åsidosätts i en härledd klass anger du positionen i den aktuella strömmen.

SetLength(Int64)

När den åsidosätts i en härledd klass anger du längden på den aktuella strömmen.

Synchronized(Stream)

Skapar en trådsäker (synkroniserad) omslutning runt det angivna Stream objektet.

ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)
Write(Byte[], Int32, Int32)

När den åsidosätts i en härledd klass skriver du en sekvens med byte till den aktuella strömmen och flyttar fram den aktuella positionen i den här strömmen med antalet skrivna byte.

Write(ReadOnlySpan<Byte>)

När den åsidosätts i en härledd klass skriver du en sekvens med byte till den aktuella strömmen och flyttar fram den aktuella positionen i den här strömmen med antalet skrivna byte.

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

Skriver asynkront en sekvens med byte till den aktuella strömmen, avancerar den aktuella positionen i den här strömmen med antalet skrivna byte och övervakar begäranden om annullering.

WriteAsync(Byte[], Int32, Int32)

Skriver asynkront en sekvens med byte till den aktuella strömmen och avancerar den aktuella positionen i den här strömmen med antalet skrivna byte.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Skriver asynkront en sekvens med byte till den aktuella strömmen, avancerar den aktuella positionen i den här strömmen med antalet skrivna byte och övervakar begäranden om annullering.

WriteByte(Byte)

Skriver en byte till den aktuella positionen i strömmen och flyttar positionen inom strömmen med en byte.

Explicita gränssnittsimplementeringar

Name Description
IDisposable.Dispose()

Släpper alla resurser som används av Stream.

Tilläggsmetoder

Name Description
AsInputStream(Stream)

Konverterar en hanterad ström i .NET för Windows Store-appar till en indataström i Windows Runtime.

AsOutputStream(Stream)

Konverterar en hanterad ström i .NET för Windows Store-appar till en utdataström i Windows Runtime.

AsRandomAccessStream(Stream)

Konverterar den angivna strömmen till en slumpmässig åtkomstström.

ConfigureAwait(IAsyncDisposable, Boolean)

Konfigurerar hur väntar på de uppgifter som returneras från en asynkron disponibel ska utföras.

Gäller för

Se även