Stream Sınıf

Tanım

Bayt dizisinin genel bir görünümünü sağlar. Bu soyut bir sınıftır.

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
Devralma
Stream
Devralma
Türetilmiş
Öznitelikler
Uygulamalar

Örnekler

Aşağıdaki örnekte, dosyaları bir dizinden başka bir dizine zaman uyumsuz olarak kopyalamak için iki FileStream nesnesinin nasıl kullanılacağı gösterilmektedir. FileStream sınıfı Stream sınıfından türetilir. Button denetimi için Click olay işleyicisinin zaman uyumsuz bir yöntem çağırdığı için async değiştiricisi ile işaretlendiğini görebilirsiniz.

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

Açıklamalar

Stream tüm akışların soyut temel sınıfıdır. Akış, dosya, giriş/çıkış cihazı, işlemler arası iletişim kanalı veya TCP/IP yuvası gibi bir bayt dizisinin soyutlamasıdır. Stream sınıfı ve türetilmiş sınıfları, bu farklı giriş ve çıkış türlerinin genel bir görünümünü sağlar ve programcıyı işletim sisteminin ve temel cihazların belirli ayrıntılarından yalıtır.

Akışlar üç temel işlem içerir:

  • Akışlardan okuyabilirsiniz. Okuma, bir akıştan bayt dizisi gibi bir veri yapısına veri aktarımıdır.

  • Akışlara yazabilirsiniz. Yazma, bir veri yapısından bir akışa veri aktarımıdır.

  • Akışlar aramayı destekleyebilir. Arama, bir akıştaki geçerli konumu sorgulamayı ve değiştirmeyi ifade eder. Arama özelliği, bir akışın sahip olduğu yedekleme deposunun türüne bağlıdır. Örneğin, ağ akışları geçerli bir konum hakkında birleşik bir kavram içermez ve bu nedenle genellikle aramayı desteklemez.

Stream devralan daha yaygın olarak kullanılan akışlardan bazıları FileStreamve MemoryStream.

Temel alınan veri kaynağına veya depoya bağlı olarak, akışlar bu özelliklerin yalnızca bazılarını destekleyebileceğinden. Stream sınıfının CanRead, CanWriteve CanSeek özelliklerini kullanarak bir akışı özelliklerini sorgulayabilirsiniz.

Read ve Write yöntemleri verileri çeşitli biçimlerde okur ve yazar. Aramayı destekleyen akışlar için Seek ve SetLength yöntemlerini ve Position ve Length özelliklerini kullanarak bir akışın geçerli konumunu ve uzunluğunu sorgulayıp değiştirin.

Bu tür IDisposable arabirimini uygular. Türünü kullanmayı bitirdiğinizde, doğrudan veya dolaylı olarak atmalısınız. Türü doğrudan atmak için Dispose yöntemini bir try/catch bloğunda çağırın. Bunu dolaylı olarak atmak için using (C#'de) veya Using (Visual Basic'te) gibi bir dil yapısı kullanın. Daha fazla bilgi için IDisposable arabirimi konusunun "IDisposable Uygulayan Bir Nesne Kullanma" bölümüne bakın.

bir Stream nesnesinin atılması, arabelleğe alınan tüm verileri temizler ve temelde sizin için Flush yöntemini çağırır. Dispose ayrıca dosya tanıtıcıları, ağ bağlantıları veya herhangi bir iç arabelleğe alma için kullanılan bellek gibi işletim sistemi kaynaklarını da serbest bırakır. BufferedStream sınıfı, okuma ve yazma performansını geliştirmek için arabelleğe alınan bir akışı başka bir akışın çevresinde sarmalama özelliği sağlar.

.NET Framework 4.5'den başlayarak, Stream sınıfı zaman uyumsuz işlemleri basitleştirmek için zaman uyumsuz yöntemler içerir. Zaman uyumsuz yöntem adında ReadAsync, WriteAsync, CopyToAsyncve FlushAsyncgibi Async içerir. Bu yöntemler, ana iş parçacığını engellemeden yoğun kaynak kullanımlı G/Ç işlemleri gerçekleştirmenizi sağlar. Zaman alan bir akış işleminin ui iş parçacığını engelleyebildiği ve uygulamanızın çalışmıyor gibi görünmesini sağlayabildiği bir Windows 8.x Store uygulamasında veya masaüstü uygulamasında bu performansla ilgili dikkat edilmesi gerekenler özellikle önemlidir. Zaman uyumsuz yöntemler, Visual Basic ve C# içindeki async ve await anahtar sözcükleriyle birlikte kullanılır.

Bir Windows 8.x Store uygulamasında kullanıldığında, Stream iki uzantı yöntemi içerir: AsInputStream ve AsOutputStream. Bu yöntemler, Stream nesnesini Windows Çalışma Zamanı'ndaki bir akışa dönüştürür. Ayrıca AsStreamForRead ve AsStreamForWrite yöntemlerini kullanarak Windows Çalışma Zamanı'ndaki bir akışı Stream nesnesine dönüştürebilirsiniz. Daha fazla bilgi için bkz. Nasıl yapılır: .NET Framework Akışları ile Windows Çalışma Zamanı Akışları Arasında Dönüştürme

Bazı akış uygulamaları, performansı geliştirmek için temel alınan verilerin yerel arabelleğe alma işlemini gerçekleştirir. Bu tür akışlarda, iç arabellekleri temizlemek ve tüm verilerin temel alınan veri kaynağına veya depoya yazılmasını sağlamak için Flush veya FlushAsync yöntemini kullanabilirsiniz.

Yedekleme deposu olmayan bir akışa ihtiyacınız varsa (bit demeti olarak da bilinir), bu amaçla tasarlanmış bir akışın örneğini almak için Null alanını kullanın.

Uygulayanlara Notlar

türetilmiş bir Streamsınıfı uyguladığınızda, Read(Byte[], Int32, Int32) ve Write(Byte[], Int32, Int32) yöntemleri için uygulamalar sağlamanız gerekir. ReadAsync(Byte[], Int32, Int32)zaman uyumsuz yöntemler, WriteAsync(Byte[], Int32, Int32)ve CopyToAsync(Stream) uygulamalarında Read(Byte[], Int32, Int32) ve Write(Byte[], Int32, Int32) zaman uyumlu yöntemleri kullanır. Bu nedenle, Read(Byte[], Int32, Int32) ve Write(Byte[], Int32, Int32) uygulamalarınız zaman uyumsuz yöntemlerle doğru şekilde çalışır. varsayılan ReadByte() ve WriteByte(Byte) uygulamaları yeni bir tek öğeli bayt dizisi oluşturur ve ardından Read(Byte[], Int32, Int32) ve Write(Byte[], Int32, Int32)uygulamalarınızı çağırır. Streamtüretdiğinizde, büyük ölçüde daha iyi performans için iç arabelleğinize erişmek için bu yöntemleri geçersiz kılmanızı öneririz. Ayrıca CanRead, CanSeek, CanWrite, Flush(), Length, Position, Seek(Int64, SeekOrigin)ve SetLength(Int64)uygulamalarını sağlamanız gerekir.

bunun yerine Close() yöntemini geçersiz kılmayın, bunun yerine tüm Stream temizleme mantığını Dispose(Boolean) yöntemine yerleştirin. Daha fazla bilgi için bkz. Dispose Yöntemi Uygulama.

Oluşturucular

Stream()

Stream sınıfının yeni bir örneğini başlatır.

Alanlar

Null

Yedekleme deposu olmayan bir Stream.

Özellikler

CanRead

Türetilmiş bir sınıfta geçersiz kılındığında, geçerli akışın okumayı destekleyip desteklemediğini belirten bir değer alır.

CanSeek

Türetilmiş bir sınıfta geçersiz kılındığında, geçerli akışın aramayı destekleyip desteklemediğini belirten bir değer alır.

CanTimeout

Geçerli akışın zaman aşımına neden olup olmadığını belirleyen bir değer alır.

CanWrite

Türetilmiş bir sınıfta geçersiz kılındığında, geçerli akışın yazmayı destekleyip desteklemediğini belirten bir değer alır.

Length

Türetilmiş bir sınıfta geçersiz kılındığında, akışın bayt cinsinden uzunluğunu alır.

Position

Türetilmiş bir sınıfta geçersiz kılındığında, geçerli akış içindeki konumu alır veya ayarlar.

ReadTimeout

Akışın zaman aşımına uğramadan önce ne kadar süreyle okumayı deneyeceğini belirleyen bir değeri milisaniye cinsinden alır veya ayarlar.

WriteTimeout

Akışın zaman aşımına uğramadan önce ne kadar süreyle yazmaya çalışacağını belirleyen bir değeri milisaniye cinsinden alır veya ayarlar.

Yöntemler

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

Zaman uyumsuz bir okuma işlemi başlatır. (Bunun yerine ReadAsync(Byte[], Int32, Int32) kullanmayı düşünün.)

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

Zaman uyumsuz bir yazma işlemi başlatır. (Bunun yerine WriteAsync(Byte[], Int32, Int32) kullanmayı düşünün.)

Close()

Geçerli akışı kapatır ve geçerli akışla ilişkili tüm kaynakları (yuvalar ve dosya tanıtıcıları gibi) serbest bırakır. Bu yöntemi çağırmak yerine akışın düzgün şekilde atıldığından emin olun.

CopyTo(Stream)

Geçerli akıştan baytları okur ve başka bir akışa yazar. Her iki akış konumu da kopyalanan bayt sayısına göre gelişmiştir.

CopyTo(Stream, Int32)

Geçerli akıştan baytları okur ve belirtilen arabellek boyutunu kullanarak başka bir akışa yazar. Her iki akış konumu da kopyalanan bayt sayısına göre gelişmiştir.

CopyToAsync(Stream)

Geçerli akıştan gelen baytları zaman uyumsuz olarak okur ve başka bir akışa yazar. Her iki akış konumu da kopyalanan bayt sayısına göre gelişmiştir.

CopyToAsync(Stream, CancellationToken)

Geçerli akıştan gelen baytları zaman uyumsuz olarak okur ve belirtilen iptal belirtecini kullanarak başka bir akışa yazar. Her iki akış konumu da kopyalanan bayt sayısına göre gelişmiştir.

CopyToAsync(Stream, Int32)

Geçerli akıştan gelen baytları zaman uyumsuz olarak okur ve belirtilen arabellek boyutunu kullanarak başka bir akışa yazar. Her iki akış konumu da kopyalanan bayt sayısına göre gelişmiştir.

CopyToAsync(Stream, Int32, CancellationToken)

Belirtilen arabellek boyutu ve iptal belirtecini kullanarak geçerli akıştan baytları zaman uyumsuz olarak okur ve başka bir akışa yazar. Her iki akış konumu da kopyalanan bayt sayısına göre gelişmiştir.

CreateObjRef(Type)

Uzak bir nesneyle iletişim kurmak için kullanılan bir ara sunucu oluşturmak için gereken tüm ilgili bilgileri içeren bir nesne oluşturur.

(Devralındığı yer: MarshalByRefObject)
CreateWaitHandle()
Geçersiz.
Geçersiz.
Geçersiz.

bir WaitHandle nesnesi ayırır.

Dispose()

Streamtarafından kullanılan tüm kaynakları serbest bırakır.

Dispose(Boolean)

Stream tarafından kullanılan yönetilmeyen kaynakları serbest bırakır ve isteğe bağlı olarak yönetilen kaynakları serbest bırakır.

DisposeAsync()

Streamtarafından kullanılan yönetilmeyen kaynakları zaman uyumsuz olarak serbest bırakır.

EndRead(IAsyncResult)

Bekleyen zaman uyumsuz okumanın tamamlanmasını bekler. (Bunun yerine ReadAsync(Byte[], Int32, Int32) kullanmayı düşünün.)

EndWrite(IAsyncResult)

Zaman uyumsuz yazma işlemini sonlandırır. (Bunun yerine WriteAsync(Byte[], Int32, Int32) kullanmayı düşünün.)

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
Flush()

Türetilmiş bir sınıfta geçersiz kılındığında, bu akış için tüm arabellekleri temizler ve arabelleğe alınan verilerin temel alınan cihaza yazılmasına neden olur.

FlushAsync()

Bu akış için tüm arabellekleri zaman uyumsuz olarak temizler ve arabelleğe alınan verilerin temel alınan cihaza yazılmasına neden olur.

FlushAsync(CancellationToken)

Bu akış için tüm arabellekleri zaman uyumsuz olarak temizler, arabelleğe alınan verilerin temel alınan cihaza yazılmasına neden olur ve iptal isteklerini izler.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetLifetimeService()
Geçersiz.

Bu örnek için yaşam süresi ilkesini denetleen geçerli yaşam süresi hizmet nesnesini alır.

(Devralındığı yer: MarshalByRefObject)
GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
InitializeLifetimeService()
Geçersiz.

Bu örneğin yaşam süresi ilkesini denetlemek için bir yaşam süresi hizmet nesnesi alır.

(Devralındığı yer: MarshalByRefObject)
MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
MemberwiseClone(Boolean)

Geçerli MarshalByRefObject nesnesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: MarshalByRefObject)
ObjectInvariant()
Geçersiz.

Contractiçin destek sağlar.

Read(Byte[], Int32, Int32)

Türetilmiş bir sınıfta geçersiz kılındığında, geçerli akıştan bir bayt dizisi okur ve okunan bayt sayısına göre akış içindeki konumu ilerletir.

Read(Span<Byte>)

Türetilmiş bir sınıfta geçersiz kılındığında, geçerli akıştan bir bayt dizisi okur ve okunan bayt sayısına göre akış içindeki konumu ilerletir.

ReadAsync(Byte[], Int32, Int32)

Geçerli akıştan zaman uyumsuz olarak bir bayt dizisi okur ve okunan bayt sayısına göre akış içindeki konumu ilerletir.

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

Geçerli akıştan zaman uyumsuz olarak bir bayt dizisi okur, okunan bayt sayısına göre akış içindeki konumu ilerletir ve iptal isteklerini izler.

ReadAsync(Memory<Byte>, CancellationToken)

Geçerli akıştan zaman uyumsuz olarak bir bayt dizisi okur, okunan bayt sayısına göre akış içindeki konumu ilerletir ve iptal isteklerini izler.

ReadAtLeast(Span<Byte>, Int32, Boolean)

Geçerli akıştan en az bayt sayısını okur ve okunan bayt sayısına göre akış içindeki konumu ilerletir.

ReadAtLeastAsync(Memory<Byte>, Int32, Boolean, CancellationToken)

Geçerli akıştan en az en az sayıda bayt zaman uyumsuz olarak okur, okunan bayt sayısına göre akıştaki konumu ilerletir ve iptal isteklerini izler.

ReadByte()

Akıştan bir bayt okur ve akışın içindeki konumu bir bayt ilerletir veya akışın sonundaysa -1 döndürür.

ReadExactly(Byte[], Int32, Int32)

Geçerli akıştan count bayt sayısını okur ve akış içindeki konumu ilerletir.

ReadExactly(Span<Byte>)

Geçerli akıştan baytları okur ve buffer doldurulana kadar akıştaki konumu ilerletir.

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

Geçerli akıştan count bayt sayısını zaman uyumsuz olarak okur, akış içindeki konumu ilerletir ve iptal isteklerini izler.

ReadExactlyAsync(Memory<Byte>, CancellationToken)

Geçerli akıştaki baytları zaman uyumsuz olarak okur, buffer doldurulana kadar akıştaki konumu ilerletir ve iptal isteklerini izler.

Seek(Int64, SeekOrigin)

Türetilmiş bir sınıfta geçersiz kılındığında geçerli akış içindeki konumu ayarlar.

SetLength(Int64)

Türetilmiş bir sınıfta geçersiz kılındığında geçerli akışın uzunluğunu ayarlar.

Synchronized(Stream)

Belirtilen Stream nesnesinin etrafında iş parçacığı güvenli (eşitlenmiş) sarmalayıcı oluşturur.

ToString()

Geçerli nesneyi temsil eden bir dize döndürür.

(Devralındığı yer: Object)
ValidateBufferArguments(Byte[], Int32, Int32)

Streamüzerinde okuma ve yazma yöntemlerine sağlanan bağımsız değişkenleri doğrular.

ValidateCopyToArguments(Stream, Int32)

CopyTo(Stream, Int32) veya CopyToAsync(Stream, Int32, CancellationToken) yöntemlerine sağlanan bağımsız değişkenleri doğrular.

Write(Byte[], Int32, Int32)

Türetilmiş bir sınıfta geçersiz kılındığında, geçerli akışa bir bayt dizisi yazar ve yazılan bayt sayısıyla bu akıştaki geçerli konumu ilerletir.

Write(ReadOnlySpan<Byte>)

Türetilmiş bir sınıfta geçersiz kılındığında, geçerli akışa bir bayt dizisi yazar ve yazılan bayt sayısıyla bu akıştaki geçerli konumu ilerletir.

WriteAsync(Byte[], Int32, Int32)

Zaman uyumsuz olarak geçerli akışa bir bayt dizisi yazar ve bu akıştaki geçerli konumu yazılan bayt sayısına göre ilerletir.

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

Zaman uyumsuz olarak geçerli akışa bir bayt dizisi yazar, bu akıştaki geçerli konumu yazılan bayt sayısına göre ilerletir ve iptal isteklerini izler.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Zaman uyumsuz olarak geçerli akışa bir bayt dizisi yazar, bu akıştaki geçerli konumu yazılan bayt sayısına göre ilerletir ve iptal isteklerini izler.

WriteByte(Byte)

Akıştaki geçerli konuma bir bayt yazar ve akış içindeki konumu bir bayt ilerletir.

Belirtik Arabirim Kullanımları

IDisposable.Dispose()

Streamtarafından kullanılan tüm kaynakları serbest bırakır.

Uzantı Metotları

CopyToAsync(Stream, PipeWriter, CancellationToken)

Stream baytları zaman uyumsuz olarak okur ve bir iptal belirteci kullanarak belirtilen PipeWriteryazar.

AsInputStream(Stream)

Windows Mağazası uygulamaları için .NET'te yönetilen bir akışı Windows Çalışma Zamanı'ndaki bir giriş akışına dönüştürür.

AsOutputStream(Stream)

Windows Mağazası uygulamaları için .NET'te yönetilen bir akışı Windows Çalışma Zamanı'ndaki bir çıkış akışına dönüştürür.

AsRandomAccessStream(Stream)

Belirtilen akışı rastgele erişim akışına dönüştürür.

ConfigureAwait(IAsyncDisposable, Boolean)

Zaman uyumsuz bir atılabilir öğeden döndürülen görevlerde awaits işleminin nasıl gerçekleştirileceğini yapılandırılır.

Şunlara uygulanır

Ayrıca bkz.