Aliran agak misterius bagi saya. Saya tidak tahu kapan harus menggunakan aliran mana dan bagaimana menggunakannya. Dapatkah seseorang menjelaskan kepada saya bagaimana aliran digunakan?
Jika saya mengerti dengan benar, ada tiga jenis aliran:
stream
read stream
write stream
Apakah ini benar? Dan, misalnya, apa perbedaan antara a Memorystream
dan a FileStream
?
Stream
) yang memperlihatkan beberapa metode berguna seperti membaca, menulis dan mengubah posisi. Sekarang Anda dapat membuat kelas berdasarkan penyimpanan dukungan mereka (FileStream, MemoryStream) yang mewarisi dariStream
dan membangun fungsionalitas tersebut berdasarkan penyimpanan dukungan tertentu.Jawaban:
Sebuah aliran adalah obyek yang digunakan untuk mentransfer data. Ada kelas aliran generik
System.IO.Stream
, dari mana semua kelas aliran lainnya di .NET diturunkan. TheStream
kelas berkaitan dengan byte.Kelas aliran konkret digunakan untuk menangani jenis data selain byte. Sebagai contoh:
FileStream
kelas digunakan ketika sumber luar adalah fileMemoryStream
digunakan untuk menyimpan data di memoriSystem.Net.Sockets.NetworkStream
menangani data jaringanAliran pembaca / penulis seperti
StreamReader
danStreamWriter
bukan aliran - aliran tersebut bukan berasal dariSystem.IO.Stream
, aliran tersebut dirancang untuk membantu menulis dan membaca data dari dan ke streaming!sumber
Untuk memperluas sedikit jawaban lain di sini, dan membantu menjelaskan banyak contoh kode yang akan Anda lihat bertitik, sebagian besar waktu Anda tidak membaca dan menulis ke aliran secara langsung. Stream adalah sarana tingkat rendah untuk mentransfer data.
Anda akan melihat bahwa semua fungsi untuk membaca dan menulis berorientasi byte, misalnya WriteByte (). Tidak ada fungsi untuk menangani bilangan bulat, string, dll. Hal ini membuat streaming sangat bertujuan umum, tetapi kurang mudah untuk digunakan jika, katakanlah, Anda hanya ingin mentransfer teks.
Namun, .NET menyediakan kelas yang mengonversi antara tipe asli dan antarmuka aliran tingkat rendah, dan mentransfer data ke atau dari aliran untuk Anda. Beberapa kelas terkenal seperti itu adalah:
Untuk menggunakannya, pertama-tama Anda memperoleh aliran Anda, kemudian Anda membuat salah satu kelas di atas dan mengaitkannya dengan aliran. Misalnya
StreamReader dan StreamWriter mengonversi antara jenis asli dan representasi stringnya, lalu mentransfer string ke dan dari aliran sebagai byte. Begitu
akan menulis "123" (tiga karakter '1', '2' lalu '3') ke aliran. Jika Anda berurusan dengan file teks (misalnya html), StreamReader dan StreamWriter adalah kelas yang akan Anda gunakan.
Sedangkan
akan menulis empat byte yang mewakili nilai integer 32-bit 123 (0x7B, 0x00, 0x00, 0x00). Jika Anda berurusan dengan file biner atau protokol jaringan, BinaryReader dan BinaryWriter adalah yang mungkin Anda gunakan. (Jika Anda bertukar data dengan jaringan atau sistem lain, Anda harus memperhatikan ketekunan , tetapi itu adalah pos lain.)
sumber
Stream bagus untuk menangani data dalam jumlah besar. Jika tidak praktis untuk memuat semua data ke dalam memori pada saat yang sama, Anda dapat membukanya sebagai aliran dan mengerjakannya dengan potongan kecil.
sumber
Stream hanyalah abstraksi (atau pembungkus) di atas
physical
aliran byte. Iniphysical
aliran disebutbase stream
. Jadi selalu ada aliran dasar di mana pembungkus aliran dibuat dan dengan demikian pembungkus diberi nama setelah jenis aliran dasar yaituFileStream
,MemoryStream
dll.Keuntungan dari stream wrapper adalah Anda mendapatkan api terpadu untuk berinteraksi dengan aliran jenis apa pun,
usb, file
dll.Mengapa Anda memperlakukan data sebagai aliran - karena potongan data dimuat sesuai permintaan, kami dapat memeriksa / memproses data sebagai potongan daripada memuat seluruh data ke dalam memori. Ini adalah cara sebagian besar program menangani file besar, misalnya mengenkripsi file image OS.
sumber
Hanya ada satu tipe dasar
Stream
. Namun dalam berbagai keadaan, beberapa anggota akan mengeluarkan pengecualian saat dipanggil karena dalam konteks itu operasi tidak tersedia.Misalnya a
MemoryStream
hanyalah cara untuk memindahkan byte masuk dan keluar dari sepotong memori. Karenanya Anda dapat memanggil Baca dan Tulis di atasnya.Di sisi lain a
FileStream
memungkinkan Anda untuk membaca atau menulis (atau keduanya) dari / ke file. Apakah Anda benar-benar dapat Membaca atau Menulis tergantung pada bagaimana file dibuka. Anda tidak dapat Menulis ke file jika Anda hanya membukanya untuk akses Baca.sumber
Saya akan mulai dengan membaca streaming di MSDN: http://msdn.microsoft.com/en-us/library/system.io.stream.aspx
Memorystream dan FileStream adalah aliran yang digunakan untuk bekerja dengan memori mentah dan File masing-masing ...
sumber
Saya tidak akan menyebut jenis aliran yang berbeda itu. Kelas Stream memiliki properti CanRead dan CanWrite yang memberi tahu Anda apakah aliran tertentu dapat dibaca dan ditulis.
Perbedaan utama antara kelas aliran yang berbeda (seperti MemoryStream vs FileStream) adalah penyimpanan dukungan - tempat data dibaca atau tempat penulisannya. Agak jelas dari namanya. MemoryStream menyimpan data hanya dalam memori, FileStream didukung oleh file pada disk, NetworkStream membaca data dari jaringan dan sebagainya.
sumber