"Helo, Amigo! Hari ini kita akan berkenalan dengan aliran input/output . Kami memilih topik ini beberapa hari lalu, tetapi hari ini kami akan menerokainya secara menyeluruh. Strim input/output dibahagikan kepada 4 kategori:"

1) Aliran dibahagikan mengikut arahnya: aliran masukan dan aliran keluaran

2) Strim dibahagikan mengikut jenis datanya: yang berfungsi dengan bait dan yang berfungsi dengan aksara .

Di sini bahagian ini diwakili dalam jadual:

Aliran input Aliran keluaran
Berfungsi dengan bait InputStream Aliran Output
Berfungsi dengan watak Pembaca Penulis

Jika objek melaksanakan antara muka InputStream , maka ia menyokong keupayaan untuk membaca bait secara berurutan daripadanya.

Jika objek melaksanakan antara muka OutputStream , maka ia menyokong keupayaan untuk menulis bait secara berurutan kepadanya.

Jika objek melaksanakan antara muka Pembaca , maka ia menyokong keupayaan untuk membaca aksara secara berurutan (aksara) daripadanya.

Jika objek melaksanakan antara muka Penulis , maka ia menyokong keupayaan untuk menulis aksara (aksara) secara berurutan kepadanya.

Strim Input/Output - 1

Strim keluaran adalah seperti pencetak. Kita boleh mengeluarkan dokumen ke pencetak. Kita boleh mengeluarkan data ke aliran keluaran.

Untuk bahagiannya, aliran input boleh dibandingkan dengan pengimbas, atau mungkin alur keluar elektrik. Dengan pengimbas, kita boleh membawa dokumen ke komputer kita. Atau kita boleh memasangkan soket elektrik dan menerima bekalan elektrik daripadanya. Kami boleh menerima data daripada aliran input.

"Di mana mereka digunakan?"

"Kelas ini digunakan di mana-mana di Java. Rakan biasa kami System.in ialah pembolehubah InputStream statik yang dinamakan dalam kelas Sistem ."

"Serius?! Jadi selama ini saya telah menggunakan InputStream dan tidak menyedarinya. Adakah System.out juga aliran?"

"Ya, System.out ialah pembolehubah PrintStream statik (keturunan OutputStream ) dalam kelas Sistem."

"Maksud anda memberitahu saya bahawa saya sentiasa menggunakan aliran dan tidak mengetahuinya?"

"Ya, dan itu hanya memberitahu kami betapa mudahnya aliran ini. Anda cuma ambil satu dan gunakannya."

"Tetapi anda tidak boleh mengatakannya tentang System.in. Kami sentiasa perlu menambah BufferedReader atau InputStreamReader padanya."

"Itu benar. Tetapi ada juga sebab untuk itu."

Terdapat banyak jenis data, dan banyak cara untuk bekerja dengannya. Jadi bilangan kelas I/O standard berkembang dengan sangat cepat, walaupun mereka melakukan segala-galanya dengan cara yang hampir sama. Untuk mengelakkan kerumitan ini, pembangun Java menggunakan prinsip abstraksi dan membahagikan kelas kepada banyak bahagian kecil.

Tetapi anda boleh menyambung bahagian ini dengan cara yang koheren dan mendapatkan fungsi yang sangat kompleks, jika anda memerlukannya. Lihat contoh ini:

Keluarkan rentetan ke konsol
System.out.println("Hello");
Simpan aliran keluaran konsol dalam pembolehubah berasingan.
Keluarkan rentetan ke strim.
PrintStream console = System.out;
console.println("Hello");
Buat tatasusunan bait dinamik (mengembangkan) dalam ingatan.
Sambungkannya ke aliran keluaran baharu (objek PrintStream).
Keluarkan rentetan ke strim.
ByteArrayOutputStream stream = new ByteArrayOutputStream();
PrintStream console = new PrintStream(stream);
console.println("Hello");

"Sejujurnya, ini seperti set Lego. Cuma saya tidak jelas apa yang dilakukan oleh mana-mana kod ini."

"Jangan risau tentang itu buat masa ini. Semuanya mengikut masanya sendiri."

Inilah yang saya mahu anda ingat: Jika kelas melaksanakan antara muka OutputStream, anda boleh menulis bait kepadanya. Hampir sama seperti anda mengeluarkan data ke konsol. Apa yang dilakukan dengannya adalah perniagaannya. Dengan "kit Lego" kami, kami tidak mengambil berat tentang tujuan setiap bahagian individu. Kami mengambil berat tentang hakikat bahawa pemilihan bahagian yang besar membolehkan kami membina perkara yang menarik.

"Okay. Kalau macam mana kita nak mula?"