Stream Kelas

Definisi

Menyediakan tampilan generik dari urutan byte. Ini adalah kelas abstrak.

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
Warisan
Stream
Warisan
Turunan
Atribut
Penerapan

Contoh

Contoh berikut menunjukkan cara menggunakan dua FileStream objek untuk menyalin file secara asinkron dari satu direktori ke direktori lain. Kelas FileStream berasal dari kelas Stream. Perhatikan bahwa penanganan aktivitas Click untuk kontrol Button ditandai dengan pengubah async karena memanggil metode asinkron.

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

Keterangan

Stream adalah kelas dasar abstrak dari semua aliran. Aliran adalah abstraksi dari urutan byte, seperti file, perangkat input/output, saluran komunikasi antar-proses, atau soket TCP/IP. Kelas Stream dan kelas turunannya memberikan tampilan umum dari berbagai jenis input dan output ini, dan mengisolasi programmer dari detail spesifik sistem operasi dan perangkat yang mendasar.

Aliran melibatkan tiga operasi fundamental:

  • Anda dapat membaca dari aliran. Membaca adalah transfer data dari aliran ke dalam struktur data, seperti array byte.

  • Anda dapat menulis ke aliran. Menulis adalah transfer data dari struktur data ke dalam aliran.

  • Stream dapat mendukung pencarian. Mencari mengacu pada kueri dan memodifikasi posisi saat ini dalam aliran. Kemampuan pencarian tergantung pada jenis penyimpanan cadangan yang dimiliki aliran. Misalnya, aliran jaringan tidak memiliki konsep terpadu dari posisi saat ini, dan oleh karena itu biasanya tidak mendukung pencarian.

Beberapa aliran yang lebih umum digunakan yang mewarisi Stream adalah FileStream, dan MemoryStream.

Bergantung pada sumber data atau repositori yang mendasar, aliran mungkin hanya mendukung beberapa kemampuan ini. Anda dapat mengkueri aliran untuk kemampuannya dengan menggunakan CanReadproperti , CanWrite, dan CanSeek kelas Stream .

Metode Read dan Write membaca dan menulis data dalam berbagai format. Untuk aliran yang mendukung pencarian, gunakan Seek metode dan SetLength dan Position properti dan Length untuk mengkueri dan memodifikasi posisi dan panjang aliran saat ini.

Jenis ini mengimplementasikan IDisposable antarmuka. Ketika Anda telah selesai menggunakan jenis , Anda harus membuangnya baik secara langsung atau tidak langsung. Untuk membuang jenis secara langsung, panggil metodenya Dispose dalam try/catch blok. Untuk membuangnya secara tidak langsung, gunakan konstruksi bahasa seperti using (dalam C#) atau Using (di Visual Basic). Untuk informasi selengkapnya, lihat bagian "Menggunakan Objek yang Mengimplementasikan IDisposable" dalam IDisposable topik antarmuka.

Membuang objek membersihkan Stream data yang di-buffer, dan pada dasarnya memanggil Flush metode untuk Anda. Dispose juga merilis sumber daya sistem operasi seperti handel file, koneksi jaringan, atau memori yang digunakan untuk buffering internal apa pun. Kelas ini BufferedStream menyediakan kemampuan membungkus aliran yang di-buffer di sekitar aliran lain untuk meningkatkan performa baca dan tulis.

Dimulai dengan .NET Framework 4.5, Stream kelas menyertakan metode asinkron untuk menyederhanakan operasi asinkron. Metode asinkron berisi Async dalam namanya, seperti ReadAsync, , WriteAsyncCopyToAsync, dan FlushAsync. Metode ini memungkinkan Anda melakukan operasi I/O intensif sumber daya tanpa memblokir utas utama. Pertimbangan performa ini sangat penting dalam aplikasi Windows 8.x Store atau aplikasi desktop tempat operasi aliran yang memakan waktu dapat memblokir rangkaian UI dan membuat aplikasi tampak seolah-olah tidak berfungsi. Metode asinkron digunakan bersama dengan async kata kunci dan await di Visual Basic dan C#.

Saat digunakan dalam aplikasi Windows 8.x Store, Stream mencakup dua metode ekstensi: AsInputStream dan AsOutputStream. Metode ini mengonversi Stream objek menjadi aliran di Windows Runtime. Anda juga dapat mengonversi aliran di Windows Runtime ke Stream objek dengan menggunakan AsStreamForRead metode dan AsStreamForWrite . Untuk informasi selengkapnya, lihat Cara: Mengonversi Antara Aliran .NET Framework dan Aliran Runtime Windows

Beberapa implementasi aliran melakukan buffering lokal dari data yang mendasar untuk meningkatkan performa. Untuk aliran tersebut Flush , Anda dapat menggunakan metode atau FlushAsync untuk menghapus buffer internal apa pun dan memastikan bahwa semua data telah ditulis ke sumber data atau repositori yang mendasar.

Jika Anda memerlukan aliran tanpa penyimpanan cadangan (juga dikenal sebagai wadah bit), gunakan Null bidang untuk mengambil instans aliran yang dirancang untuk tujuan ini.

Catatan Bagi Implementer

Ketika Anda menerapkan kelas turunan , StreamAnda harus menyediakan implementasi untuk Read(Byte[], Int32, Int32) metode dan Write(Byte[], Int32, Int32) . Metode asinkron ReadAsync(Byte[], Int32, Int32), , WriteAsync(Byte[], Int32, Int32)dan CopyToAsync(Stream) menggunakan metode Read(Byte[], Int32, Int32) sinkron dan Write(Byte[], Int32, Int32) dalam implementasinya. Oleh karena itu, implementasi Anda dan Read(Byte[], Int32, Int32)Write(Byte[], Int32, Int32) akan bekerja dengan benar dengan metode asinkron. Implementasi ReadByte() default dan WriteByte(Byte) membuat array byte elemen tunggal baru, lalu memanggil implementasi Read(Byte[], Int32, Int32) Dan Write(Byte[], Int32, Int32). Ketika Anda berasal dari Stream, kami sarankan Anda mengambil alih metode ini untuk mengakses buffer internal Anda, jika Anda memilikinya, untuk performa yang jauh lebih baik. Anda juga harus menyediakan implementasi dari CanRead, CanSeek, CanWrite, Flush(), Length, Position, Seek(Int64, SeekOrigin), dan SetLength(Int64).

Jangan mengesampingkan Close() metode , sebagai gantinya, menempatkan semua logika pembersihan StreamDispose(Boolean) dalam metode . Untuk informasi selengkapnya, lihat Menerapkan Metode Buang.

Konstruktor

Stream()

Menginisialisasi instans baru kelas Stream.

Bidang

Null

A Stream tanpa toko cadangan.

Properti

CanRead

Saat ditimpa di kelas turunan, mendapatkan nilai yang menunjukkan apakah aliran saat ini mendukung pembacaan.

CanSeek

Saat ditimpa di kelas turunan, mendapatkan nilai yang menunjukkan apakah aliran saat ini mendukung pencarian.

CanTimeout

Mendapatkan nilai yang menentukan apakah aliran saat ini dapat kehabisan waktu.

CanWrite

Ketika ditimpa di kelas turunan, mendapatkan nilai yang menunjukkan apakah aliran saat ini mendukung penulisan.

Length

Ketika ditimpa di kelas turunan, mendapatkan panjang dalam byte aliran.

Position

Ketika ditimpa di kelas turunan, mendapatkan atau mengatur posisi dalam aliran saat ini.

ReadTimeout

Mendapatkan atau menetapkan nilai, dalam milidetik, yang menentukan berapa lama aliran akan mencoba membaca sebelum waktu habis.

WriteTimeout

Mendapatkan atau menetapkan nilai, dalam milidetik, yang menentukan berapa lama aliran akan mencoba menulis sebelum waktu habis.

Metode

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

Memulai operasi baca asinkron. (Pertimbangkan untuk menggunakan ReadAsync(Byte[], Int32, Int32) sebagai gantinya.)

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

Memulai operasi tulis asinkron. (Pertimbangkan untuk menggunakan WriteAsync(Byte[], Int32, Int32) sebagai gantinya.)

Close()

Menutup aliran saat ini dan merilis sumber daya apa pun (seperti soket dan handel file) yang terkait dengan aliran saat ini. Alih-alih memanggil metode ini, pastikan aliran dibuang dengan benar.

CopyTo(Stream)

Membaca byte dari aliran saat ini dan menulisnya ke aliran lain. Kedua posisi aliran dilanjutkan dengan jumlah byte yang disalin.

CopyTo(Stream, Int32)

Membaca byte dari aliran saat ini dan menulisnya ke aliran lain, menggunakan ukuran buffer tertentu. Kedua posisi aliran dilanjutkan dengan jumlah byte yang disalin.

CopyToAsync(Stream)

Secara asinkron membaca byte dari aliran saat ini dan menulisnya ke aliran lain. Kedua posisi aliran dilanjutkan dengan jumlah byte yang disalin.

CopyToAsync(Stream, CancellationToken)

Secara asinkron membaca byte dari aliran saat ini dan menulisnya ke aliran lain, menggunakan token pembatalan tertentu. Kedua posisi aliran dilanjutkan dengan jumlah byte yang disalin.

CopyToAsync(Stream, Int32)

Secara asinkron membaca byte dari aliran saat ini dan menulisnya ke aliran lain, menggunakan ukuran buffer tertentu. Kedua posisi aliran dilanjutkan dengan jumlah byte yang disalin.

CopyToAsync(Stream, Int32, CancellationToken)

Secara asinkron membaca byte dari aliran saat ini dan menulisnya ke aliran lain, menggunakan ukuran buffer dan token pembatalan tertentu. Kedua posisi aliran dilanjutkan dengan jumlah byte yang disalin.

CreateObjRef(Type)

Membuat objek yang berisi semua informasi relevan yang diperlukan untuk menghasilkan proksi yang digunakan untuk berkomunikasi dengan objek jarak jauh.

(Diperoleh dari MarshalByRefObject)
CreateWaitHandle()
Kedaluwarsa.
Kedaluwarsa.
Kedaluwarsa.

Mengalokasikan WaitHandle objek.

Dispose()

Merilis semua sumber daya yang Streamdigunakan oleh .

Dispose(Boolean)

Merilis sumber daya tidak terkelola yang digunakan oleh Stream dan secara opsional merilis sumber daya terkelola.

DisposeAsync()

Secara asinkron merilis sumber daya yang tidak dikelola yang digunakan oleh Stream.

EndRead(IAsyncResult)

Menunggu pembacaan asinkron yang tertunda selesai. (Pertimbangkan untuk menggunakan ReadAsync(Byte[], Int32, Int32) sebagai gantinya.)

EndWrite(IAsyncResult)

Mengakhiri operasi penulisan asinkron. (Pertimbangkan untuk menggunakan WriteAsync(Byte[], Int32, Int32) sebagai gantinya.)

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
Flush()

Ketika diganti dalam kelas turunan, membersihkan semua buffer untuk aliran ini dan menyebabkan data buffered ditulis ke perangkat yang mendasarinya.

FlushAsync()

Secara asinkron menghapus semua buffer untuk aliran ini dan menyebabkan data yang di-buffer ditulis ke perangkat yang mendasar.

FlushAsync(CancellationToken)

Secara asinkron menghapus semua buffer untuk aliran ini, menyebabkan data yang di-buffer ditulis ke perangkat yang mendasar, dan memantau permintaan pembatalan.

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetLifetimeService()
Kedaluwarsa.

Mengambil objek layanan seumur hidup saat ini yang mengontrol kebijakan seumur hidup untuk instans ini.

(Diperoleh dari MarshalByRefObject)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
InitializeLifetimeService()
Kedaluwarsa.

Mendapatkan objek layanan seumur hidup untuk mengontrol kebijakan seumur hidup untuk instans ini.

(Diperoleh dari MarshalByRefObject)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
MemberwiseClone(Boolean)

Membuat salinan dangkal objek saat ini MarshalByRefObject .

(Diperoleh dari MarshalByRefObject)
ObjectInvariant()
Kedaluwarsa.

Menyediakan dukungan untuk Contract.

Read(Byte[], Int32, Int32)

Ketika ditimpa di kelas turunan, membaca urutan byte dari aliran saat ini dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca.

Read(Span<Byte>)

Ketika ditimpa di kelas turunan, membaca urutan byte dari aliran saat ini dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca.

ReadAsync(Byte[], Int32, Int32)

Secara asinkron membaca urutan byte dari aliran saat ini dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca.

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

Secara asinkron membaca urutan byte dari aliran saat ini, memajukan posisi dalam aliran dengan jumlah byte yang dibaca, dan memantau permintaan pembatalan.

ReadAsync(Memory<Byte>, CancellationToken)

Secara asinkron membaca urutan byte dari aliran saat ini, memajukan posisi dalam aliran dengan jumlah byte yang dibaca, dan memantau permintaan pembatalan.

ReadAtLeast(Span<Byte>, Int32, Boolean)

Membaca setidaknya jumlah minimum byte dari aliran saat ini dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca.

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

Secara asinkron membaca setidaknya jumlah minimum byte dari aliran saat ini, memajukan posisi dalam aliran dengan jumlah byte yang dibaca, dan memantau permintaan pembatalan.

ReadByte()

Membaca byte dari aliran dan memajukan posisi dalam aliran dengan satu byte, atau mengembalikan -1 jika di akhir aliran.

ReadExactly(Byte[], Int32, Int32)

count Membaca jumlah byte dari aliran saat ini dan memajukan posisi dalam aliran.

ReadExactly(Span<Byte>)

Membaca byte dari aliran saat ini dan memajukan posisi dalam aliran hingga buffer terisi.

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

Secara asinkron membaca count jumlah byte dari aliran saat ini, memajukan posisi dalam aliran, dan memantau permintaan pembatalan.

ReadExactlyAsync(Memory<Byte>, CancellationToken)

Secara asinkron membaca byte dari aliran saat ini, memajukan posisi dalam aliran hingga buffer terisi, dan memantau permintaan pembatalan.

Seek(Int64, SeekOrigin)

Ketika diganti dalam kelas turunan, mengatur posisi dalam aliran saat ini.

SetLength(Int64)

Saat ditimpa di kelas turunan, mengatur panjang aliran saat ini.

Synchronized(Stream)

Membuat pembungkus aman utas (disinkronkan) di sekitar objek yang ditentukan Stream .

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)
ValidateBufferArguments(Byte[], Int32, Int32)

Memvalidasi argumen yang disediakan untuk membaca dan menulis metode pada Stream.

ValidateCopyToArguments(Stream, Int32)

Memvalidasi argumen yang diberikan ke CopyTo(Stream, Int32) metode atau CopyToAsync(Stream, Int32, CancellationToken) .

Write(Byte[], Int32, Int32)

Ketika ditimpa di kelas turunan, menulis urutan byte ke aliran saat ini dan memajukan posisi saat ini dalam aliran ini dengan jumlah byte yang ditulis.

Write(ReadOnlySpan<Byte>)

Ketika ditimpa di kelas turunan, menulis urutan byte ke aliran saat ini dan memajukan posisi saat ini dalam aliran ini dengan jumlah byte yang ditulis.

WriteAsync(Byte[], Int32, Int32)

Secara asinkron menulis urutan byte ke aliran saat ini dan memajukan posisi saat ini dalam aliran ini dengan jumlah byte yang ditulis.

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

Secara asinkron menulis urutan byte ke aliran saat ini, memajukan posisi saat ini dalam aliran ini dengan jumlah byte yang ditulis, dan memantau permintaan pembatalan.

WriteAsync(ReadOnlyMemory<Byte>, CancellationToken)

Secara asinkron menulis urutan byte ke aliran saat ini, memajukan posisi saat ini dalam aliran ini dengan jumlah byte yang ditulis, dan memantau permintaan pembatalan.

WriteByte(Byte)

Menulis byte ke posisi saat ini di aliran dan memajukan posisi dalam aliran dengan satu byte.

Implementasi Antarmuka Eksplisit

IDisposable.Dispose()

Merilis semua sumber daya yang Streamdigunakan oleh .

Metode Ekstensi

AsInputStream(Stream)

Mengonversi aliran terkelola di aplikasi .NET untuk Windows Store ke aliran input di Windows Runtime.

AsOutputStream(Stream)

Mengonversi aliran terkelola di .NET untuk aplikasi Windows Store ke aliran output di Windows Runtime.

AsRandomAccessStream(Stream)

Mengonversi aliran yang ditentukan menjadi aliran akses acak.

ConfigureAwait(IAsyncDisposable, Boolean)

Mengonfigurasi bagaimana menunggu tugas yang dikembalikan dari asinkron sekali pakai dilakukan.

Berlaku untuk

Lihat juga