Bagikan melalui


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 objek FileStream 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 urutan byte, seperti file, perangkat input/output, pipa 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 mendasar:

  • 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 dari StreamFileStream, 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 properti CanRead, CanWrite, dan CanSeek kelas Stream.

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

Jenis ini mengimplementasikan antarmuka IDisposable. Setelah selesai menggunakan jenisnya, Anda harus membuangnya baik secara langsung maupun tidak langsung. Untuk membuang jenis secara langsung, panggil metode Dispose dalam blok try/catch. 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 Menerapkan IDisposable" di topik antarmuka IDisposable.

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

Dimulai dengan .NET Framework 4.5, kelas Stream menyertakan metode asinkron untuk menyederhanakan operasi asinkron. Metode asinkron berisi Async dalam namanya, seperti ReadAsync, WriteAsync, CopyToAsync, 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 di mana operasi streaming yang memakan waktu dapat memblokir utas UI dan membuat aplikasi Anda muncul seolah-olah tidak berfungsi. Metode asinkron digunakan bersama dengan kata kunci async dan await di Visual Basic dan C#.

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

Beberapa implementasi aliran melakukan buffering lokal data yang mendasar untuk meningkatkan performa. Untuk aliran tersebut, Anda dapat menggunakan metode Flush 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 backing (juga dikenal sebagai wadah bit), gunakan bidang Null untuk mengambil instans aliran yang dirancang untuk tujuan ini.

Catatan Bagi Implementer

Ketika Anda menerapkan kelas turunan Stream, Anda harus memberikan implementasi untuk metode Read(Byte[], Int32, Int32) dan Write(Byte[], Int32, Int32). Metode asinkron ReadAsync(Byte[], Int32, Int32), WriteAsync(Byte[], Int32, Int32), dan CopyToAsync(Stream) menggunakan metode sinkron Read(Byte[], Int32, Int32) dan Write(Byte[], Int32, Int32) dalam implementasinya. Oleh karena itu, implementasi Read(Byte[], Int32, Int32) dan Write(Byte[], Int32, Int32) Anda akan bekerja dengan benar dengan metode asinkron. Implementasi default ReadByte() dan WriteByte(Byte) membuat array byte elemen tunggal baru, lalu memanggil implementasi Read(Byte[], Int32, Int32) dan Write(Byte[], Int32, Int32)Anda. 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 CanRead, CanSeek, CanWrite, Flush(), Length, Position, Seek(Int64, SeekOrigin), dan SetLength(Int64).

Jangan mengambil alih metode Close(), sebagai gantinya, letakkan semua logika pembersihan Stream dalam metode Dispose(Boolean). Untuk informasi selengkapnya, lihat Menerapkan Metode Buang.

Konstruktor

Stream()

Menginisialisasi instans baru kelas Stream.

Bidang

Null

Stream tanpa toko cadangan.

Properti

CanRead

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

CanSeek

Ketika 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

Saat ditimpa di kelas turunan, mendapatkan panjang byte aliran.

Position

Saat 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 penulisan 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 dimajukan 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 dimajukan dengan jumlah byte yang disalin.

CopyToAsync(Stream)

Secara asinkron membaca byte dari aliran saat ini dan menulisnya ke aliran lain. Kedua posisi aliran dimajukan 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 dimajukan 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 dimajukan 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 yang ditentukan. Kedua posisi aliran dimajukan 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 objek WaitHandle.

Dispose()

Merilis semua sumber daya yang digunakan oleh Stream.

Dispose(Boolean)

Merilis sumber daya yang tidak dikelola 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 ditimpa di kelas turunan, menghapus semua buffer untuk aliran ini dan menyebabkan data buffer ditulis ke perangkat yang mendasar.

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 Type instans 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 Objectsaat ini.

(Diperoleh dari Object)
MemberwiseClone(Boolean)

Membuat salinan dangkal objek MarshalByRefObject saat ini.

(Diperoleh dari MarshalByRefObject)
ObjectInvariant()
Kedaluwarsa.

Menyediakan dukungan untuk Contract.

Read(Byte[], Int32, Int32)

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

Read(Span<Byte>)

Ketika ditimpa dalam 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)

Membaca count 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)

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

ReadExactlyAsync(Memory<Byte>, CancellationToken)

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

Seek(Int64, SeekOrigin)

Saat ditimpa di 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 Stream yang ditentukan.

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 metode CopyTo(Stream, Int32) atau CopyToAsync(Stream, Int32, CancellationToken).

Write(Byte[], Int32, Int32)

Ketika ditimpa dalam 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 dalam 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 dalam aliran dan memajukan posisi dalam aliran oleh satu byte.

Implementasi Antarmuka Eksplisit

IDisposable.Dispose()

Merilis semua sumber daya yang digunakan oleh Stream.

Metode Ekstensi

CopyToAsync(Stream, PipeWriter, CancellationToken)

Secara asinkron membaca byte dari Stream dan menulisnya ke PipeWriteryang ditentukan , menggunakan token pembatalan.

AsInputStream(Stream)

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

AsOutputStream(Stream)

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

AsRandomAccessStream(Stream)

Mengonversi aliran yang ditentukan ke aliran akses acak.

ConfigureAwait(IAsyncDisposable, Boolean)

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

Berlaku untuk

Lihat juga