Fungsi terpenting komputer adalah mengolah data. Bahasa komputer yang berguna harus memiliki kemampuan IO yang baik sehingga data yang belum diproses mengalir ke dalam program dan data yang diproses mengalir keluar.
Dibandingkan dengan bahasa lain, fungsi IO Java lebih kompleks. Dalam bahasa lain, banyak fungsi IO (seperti membaca file) dienkapsulasi dan dapat diimplementasikan dengan satu atau dua baris program. Di Java, pemrogram sering kali memerlukan berbagai tingkat dekorasi untuk mencapai pembacaan file.
Manfaat dari kompleksitas relatif adalah fleksibilitas IO. Di Java, pemrogram dapat mengontrol seluruh proses IO untuk merancang metode IO terbaik. Kita akan melihat lebih lanjut di bawah.
Contoh IO
Di bawah ini adalah file file.txt yang saya gunakan untuk demonstrasi
Halo Dunia! Halo Nerd!
Mari kita pelajari dulu contoh pembacaan file:
import java.io.*;ujian kelas publik{ public static void main(String[] args) { coba { BufferedReader br = new BufferedReader(new FileReader("file.txt")); while (baris != null) { System.out.println(baris); baris = br.readLine(); } br.close(); e) { System.out.println("Masalah IO");
Program ini berisi pengendali pengecualian coba...tangkap...akhirnya. Silakan merujuk ke Tutorial Lanjutan Java tentang Penanganan Pengecualian
Dekorator dan kombinasi fungsi
Kunci untuk memprogram IO adalah membuat objek BufferedReader br:
BufferedReader br = BufferedReader baru(FileReader baru("file.txt"));
Pada proses pembuatan, pertama-tama kita membuat objek FileReader. Fungsi objek ini adalah membaca aliran byte dari file "file.txt" dan mengubahnya menjadi aliran teks. Di Java, pengkodean teks standar adalah unicode. BufferedReader() menerima objek FileReader, memperluas fungsi FileReader, dan membuat objek BufferedReader baru. Selain fungsi pembacaan dan konversi file yang disebutkan di atas, objek ini juga menyediakan fungsi pembacaan cache (buffer). Terakhir, kita bisa membaca file baris demi baris dengan memanggil metode readLine() pada objek br.
(Pembacaan cache adalah membuka area di memori sebagai cache, yang menyimpan aliran teks yang dibaca oleh FileReader. Saat konten cache dibaca (seperti perintah readLine()), cache akan memuat aliran teks berikutnya.)
BufferedReader() adalah dekorator yang menerima objek primitif dan mengembalikan objek yang dihias dengan fungsi yang lebih kompleks. Manfaat dekorator adalah dapat digunakan untuk mendekorasi berbagai objek. Apa yang kami modifikasi di sini adalah aliran teks yang dibaca dari file. Aliran teks lainnya, seperti input standar, aliran transmisi jaringan, dll., dapat dimodifikasi oleh BufferedReader() untuk mencapai pembacaan cache.
Diagram di bawah menunjukkan cara kerja br, dengan aliran data dari bawah ke atas:
Proses dekorasi di atas sangat mirip dengan ide aliran teks di Linux. Di Linux, kami menggunakan pendekatan mirip fungsi untuk memproses dan meneruskan aliran teks. Di Java, kami menggunakan dekorator. Namun tujuannya serupa, yaitu untuk mencapai modularisasi dan kombinasi fungsi yang bebas.
lebih banyak kombinasi
Faktanya, Java menyediakan banyak sekali dekorator. FileReader menggabungkan dua langkah pembacaan dan konversi, dan mengadopsi pengaturan default yang umum digunakan, seperti unicode untuk pengkodean. Kita dapat menggunakan kombinasi FileInputStream + InputStreamReader untuk menggantikan FileReader, sehingga memisahkan dua langkah membaca byte dan mengonversi, serta memiliki kontrol yang lebih baik atas kedua proses tersebut.
(Tentu saja FileReader lebih nyaman digunakan. InputStreamReader mengubah FileInputStream menjadi Pembaca untuk memproses teks unicode)
Panah menunjukkan arah aliran data
Aliran membaca dan menulis berasal dari empat kelas dasar: InputStream, OutputStream, Reader dan Writer. InputStream dan Reader menangani operasi membaca, dan OutputStream dan Writer menangani operasi penulisan. Keduanya terletak di paket java.io. Hubungan pewarisannya adalah sebagai berikut:
java.io
Selain itu, IOException memiliki kelas turunan berikut:
Pengecualian IO
Pembaca dan Penulis serta kelas turunannya menangani teks unicode. Seperti yang kita lihat Buffered Reader, InputStreamReader atau FileReader.
InputStream dan OutputStream serta kelas turunannya menangani aliran byte. Data di komputer dapat dianggap dalam bentuk byte, sehingga InputStream dan OutputStream dapat digunakan untuk memproses data yang lebih luas. Misalnya, kita dapat menggunakan kombinasi berikut untuk membaca data (seperti bilangan bulat) yang terdapat dalam file terkompresi:
Panah menunjukkan arah aliran data
Kami membaca aliran byte dari file terkompresi, lalu mendekompresinya, dan terakhir membaca datanya.
menulis
Operasi tulis mirip dengan operasi baca. Kita dapat mengimplementasikan fungsi penulisan yang kompleks dengan menggunakan dekorasi. Berikut adalah contoh sederhana penulisan teks:
import java.io.*;ujian kelas publik{ public static void main(String[] args) { coba { String content = "Terima kasih atas ikan Anda."; / buat file jika tidak ada if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(content); bw.close(); } catch(IOException e) { System.out.println("Masalah IO");
Objek file dibuat di atas untuk memproses jalur file.
Meringkaskan
Ini hanyalah pengenalan dasar tentang Java IO. IO Java relatif kompleks. Pemrogram Java perlu meluangkan waktu untuk mengenal kelas-kelas di java.io dan fungsinya.