Stream Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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 nesnenin nasıl kullanılacağı gösterilmektedir.
FileStream sınıfı sınıfından Stream türetilir.
Click denetiminin Button olay işleyicisinin, zaman uyumsuz bir yöntemi çağırdığı için async değiştiriciyle işaretlendiğini fark 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 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.
öğesinden devralınan daha yaygın 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ı destekleyebileceğinden. 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 akışın SeekSetLength geçerli konumunu ve uzunluğunu sorgulamak ve değiştirmek için ve Length yöntemlerini Position ve özelliklerini kullanın.
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 atabilmek için, bir Disposetry/ bloğunda catch yöntemini ç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 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ışı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 bir yöntem adında , WriteAsync, CopyToAsyncve FlushAsyncgibi ReadAsynciçerirAsync. 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 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ı'ndaki bir akışa dönüştürür. Ayrıca ve AsStreamForWrite yöntemlerini kullanarak Windows Çalışma Zamanı'ndaki bir akışı bir Stream nesneye AsStreamForRead 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. zaman uyumsuz yöntemleri ReadAsync(Byte[], Int32, Int32), WriteAsync(Byte[], Int32, Int32)ve CopyToAsync(Stream) zaman uyumlu yöntemleri Read(Byte[], Int32, Int32) ve Write(Byte[], Int32, Int32) uygulamalarında 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, çok daha iyi performans için iç arabelleğinize erişmek için bu yöntemleri geçersiz kılmanızı öneririz. Ayrıca , , CanSeek, , CanWrite, Flush(), Length, PositionSeek(Int64, SeekOrigin)ve SetLength(Int64)uygulamalarını CanReadsağlamanız gerekir.
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
| Name | Description |
|---|---|
| Stream() |
Stream sınıfının yeni bir örneğini başlatır. |
Alanlar
| Name | Description |
|---|---|
| Null |
|
Özellikler
| Name | Description |
|---|---|
| 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
| Name | Description |
|---|---|
| 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 şekilde atıldığından emin olun. |
| 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. |
| 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. |
| 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, 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. |
| 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) |
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. |
| 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() |
tarafından Streamkullanılan tüm kaynakları serbest bırakır. |
| Dispose(Boolean) |
tarafından Stream kullanılan yönetilmeyen kaynakları serbest bırakır ve isteğe bağlı olarak yönetilen kaynakları 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() |
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 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ı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, 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(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(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) |
|
| ReadExactly(Span<Byte>) |
Geçerli akıştan baytları okur ve doldurulana kadar |
| ReadExactlyAsync(Byte[], Int32, Int32, CancellationToken) |
Geçerli akıştaki bayt sayısını zaman uyumsuz olarak okur |
| ReadExactlyAsync(Memory<Byte>, CancellationToken) |
Geçerli akıştaki baytları zaman uyumsuz olarak okur, doldurulana kadar |
| 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 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) |
üzerinde 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 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, 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(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(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ı
| Name | Description |
|---|---|
| IDisposable.Dispose() |
tarafından Streamkullanılan tüm kaynakları serbest bırakır. |
Uzantı Metotları
| Name | Description |
|---|---|
| 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. |
| CopyToAsync(Stream, PipeWriter, CancellationToken) |
baytlarını Stream zaman uyumsuz olarak okur ve bir iptal belirteci kullanarak belirtilen PipeWriteröğesine yazar. |