Stream Sınıf

Tanım

Bayt dizisinin genel 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 nesnenin nasıl kullanılacağı gösterilmektedir. sınıfı FileStream sınıfından Stream türetilir. Click denetimi için Button olay işleyicisinin, zaman uyumsuz bir yöntem çağırdığı için async değiştiricisi ile işaretlendiğine dikkat edin.

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 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şlemi 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 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ının geçerli konumla ilgili birleşik bir kavramı yoktur ve bu nedenle genellikle aramayı desteklemez.

'den devralınan daha yaygın olarak kullanılan akışlardan Stream bazıları ve MemoryStream'tirFileStream.

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

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

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

Bir Stream nesnenin atılması, arabelleğe alınan tüm verileri temizler ve temelde sizin için yöntemini çağırır Flush . 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ı serbest bırakır. sınıfı, BufferedStream okuma ve yazma performansını geliştirmek için arabelleğe alınan bir akışı başka bir akış etrafında 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 , WriteAsync, CopyToAsyncve FlushAsyncgibi ReadAsyncbir yöntem içerirAsync. Bu yöntemler, ana iş parçacığını engellemeden yoğun kaynak kullanımlı G/Ç işlemleri gerçekleştirmenizi sağlar. Bu performans değerlendirmesi, zaman alan bir akış işleminin ui iş parçacığını engellediğ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 özellikle önemlidir. Zaman uyumsuz yöntemler, Visual Basic ve C# içindeki ve await anahtar sözcükleriyle async birlikte kullanılır.

Bir Windows 8.x Store uygulamasında kullanıldığında iki Stream uzantı yöntemi içerir: AsInputStream ve AsOutputStream. Bu yöntemler bir Stream nesneyi Windows Çalışma Zamanı bir akışa dönüştürür. ayrıca ve AsStreamForWrite yöntemlerini kullanarak Windows Çalışma Zamanı bir akışı nesneye StreamAsStreamForRead dönüştürebilirsiniz. Daha fazla bilgi için bkz. Nasıl yapılır: .NET Framework Akışları ve 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 deposuna yazılmasını sağlamak için veya FlushAsync yöntemini kullanabilirsinizFlush.

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

Uygulayanlara Notlar

türetilmiş bir sınıfını Streamuyguladığınızda ve Write(Byte[], Int32, Int32) yöntemleri için Read(Byte[], Int32, Int32) uygulamalar sağlamanız gerekir. , WriteAsync(Byte[], Int32, Int32)ve zaman uyumsuz yöntemleriReadAsync(Byte[], Int32, Int32), zaman uyumlu yöntemleri Read(Byte[], Int32, Int32) ve Write(Byte[], Int32, Int32) uygulamalarında CopyToAsync(Stream) kullanır. Bu nedenle ve Write(Byte[], Int32, Int32) uygulamalarınız Read(Byte[], Int32, Int32) zaman uyumsuz yöntemlerle doğru şekilde çalışır. varsayılan uygulamaları ReadByte() ve WriteByte(Byte) yeni bir tek öğeli bayt dizisi oluşturup uygulamalarınızı ve Write(Byte[], Int32, Int32)olarak adlandırınRead(Byte[], Int32, Int32). 'den Streamtüretdiğinizde, iç arabelleğinize erişmek için bu yöntemleri geçersiz kılmanızı öneririz, varsa, önemli ölçüde daha iyi performans için. Ayrıca , , , , CanWrite, LengthPositionSeek(Int64, SeekOrigin)Flush()ve SetLength(Int64)uygulamalarını CanReadsağlamanız gerekir. CanSeek

Bunun yerine yöntemini geçersiz kılmayın Close()Stream , tüm temizleme mantığını yöntemine Dispose(Boolean) 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

Stream Arka plan mağazası olmayan bir.

Ö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 kullanmayı ReadAsync(Byte[], Int32, Int32) düşünün.)

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

Zaman uyumsuz bir yazma işlemi başlatır. (Bunun yerine kullanmayı WriteAsync(Byte[], Int32, Int32) 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 bir ş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 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)

Geçerli akıştan baytları zaman uyumsuz olarak okur ve belirtilen arabellek boyutu ve iptal belirtecini kullanarak 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 nesne ayırır.

Dispose()

Stream tarafı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 yönetilen kaynakları isteğe bağlı olarak serbest bırakır.

DisposeAsync()

tarafından Streamkullanılan yönetilmeyen kaynakları zaman uyumsuz olarak serbest bırakır.

EndRead(IAsyncResult)

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

EndWrite(IAsyncResult)

Zaman uyumsuz yazma işlemini sonlandırır. (Bunun yerine kullanmayı WriteAsync(Byte[], Int32, Int32) 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()

Type Geçerli örneğini 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 Objectöğesinin sığ bir kopyasını oluşturur.

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

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

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

için Contractdestek 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ı kadar 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ı kadar akış içindeki konumu ilerletir.

ReadAsync(Byte[], Int32, Int32)

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

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

Geçerli akıştan bir bayt dizisini zaman uyumsuz olarak 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 bir bayt dizisini zaman uyumsuz olarak 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ı kadar akış içindeki konumu ilerletir ve iptal isteklerini izler.

ReadByte()

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

ReadExactly(Byte[], Int32, Int32)

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

ReadExactly(Span<Byte>)

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

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

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

ReadExactlyAsync(Memory<Byte>, CancellationToken)

Geçerli akıştaki baytları zaman uyumsuz olarak okur, doldurulana kadar buffer akış içindeki 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 nesnenin çevresinde iş parçacığı güvenli (eşitlenmiş) bir sarmalayıcı oluşturur.

ToString()

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

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

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

ValidateCopyToArguments(Stream, Int32)

veya CopyToAsync(Stream, Int32, CancellationToken) yöntemlerine CopyTo(Stream, Int32) 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 bu akıştaki geçerli konumu yazılan bayt sayısı kadar 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 bu akıştaki geçerli konumu yazılan bayt sayısı kadar 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()

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

Uzantı Metotları

AsInputStream(Stream)

Windows Mağazası uygulamaları için .NET'te yönetilen bir akışı Windows Çalışma Zamanı 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ı bir çıkış akışına dönüştürür.

AsRandomAccessStream(Stream)

Belirtilen akışı rasgele 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ştirildiğini yapılandırılır.

Şunlara uygulanır

Ayrıca bkz.