"Halo, Amigo! Hari ini, Ellie memberitahumu tentang pola adaptor."

Sebagian besar kelas yang terkait dengan aliran I/O diimplementasikan sebagai adaptor. Mereka mengonversi antarmuka yang setara atau menghubungkannya, mulai dari yang sederhana dan naik ke yang kompleks.

"Apakah InputStreamReader dan BufferedReader juga adapter? Paling tidak, keduanya sangat mirip dengan adapter dalam cara penggunaannya: Setelah sebuah objek dibuat, ia diteruskan ke konstruktor kelas lain."

"Ya, InputStreamReader mengonversi antarmuka InputStream ke antarmuka Pembaca . BufferedReader bukanlah adaptor dalam bentuknya yang paling murni, karena pembuat Java memutuskan untuk tidak memberikan metode antarmuka mereka sendiri yang terpisah. Tapi ini adalah semangat yang sama."

Alih-alih menulis bazillion kelas yang berbeda, pembuat Java menulis dua lusin adaptor dan memungkinkan mereka untuk terhubung satu sama lain seperti yang diinginkan oleh seorang programmer.

Pendekatan ini sangat nyaman. Seorang programmer selalu dapat menulis kelas dan/atau adaptornya, memintanya mengimplementasikan antarmuka standar, dan memasukkannya ke dalam rantai objek adaptor yang dia bangun.

"Jadi begitulah cara kerjanya. Alih-alih kelas besar yang kompleks, kami membuat rangkaian objek dan adaptor sederhana. Lalu Anda tinggal membuatnya dan menggabungkannya dalam urutan yang benar!"

"Dan Anda menerapkan apa pun yang hilang."

"Ya, saya mengerti."

"Tapi sebenarnya saya ingin memberi tahu Anda tentang Pembaca dan Penulis hari ini. Ini adalah dua kelas abstrak yang sangat mirip dengan kelas InputStream dan OutputStream. Tapi tidak seperti kelas-kelas itu, kedua kelas ini bekerja dengan karakter. Mereka membaca dan menulis karakter. Mereka adalah sangat nyaman saat bekerja dengan informasi tekstual. Mari kita lihat metode yang mereka miliki:"

Metode pembaca Apa yang dilakukan metode ini
int read(char[] cbuf);
"Metode ini segera membaca beberapa karakter ke dalam buffer ( array char ), hingga buffer penuh atau hingga sumber tidak memiliki karakter lagi untuk dibaca."
Metode mengembalikan jumlah karakter yang benar-benar dibaca (yang bisa kurang dari panjang array)
int read();
"Metode ini membaca satu karakter dan mengembalikannya. Hasilnya diperlebar menjadi int untuk tampilan. Jika tidak ada karakter yang tersedia, maka metode ini mengembalikan -1."
boolean ready();
Metode ini mengembalikan true jika ada karakter yang belum dibaca untuk metode baca
void close();
Metode ini «menutup» aliran. Anda menyebutnya setelah selesai bekerja dengan aliran.
Objek kemudian melakukan operasi pembersihan yang diperlukan untuk menutup file, dll.
Pada titik ini, Anda tidak dapat membaca data lagi dari aliran.

"Ternyata metode reader read(char [] cbuf) memungkinkan kita membaca seluruh blok karakter, bukan satu karakter pada satu waktu. Jadi lebih cepat dan lebih nyaman."

"Tepat sekali. Dan sekarang mari kita lihat metode apa yang dimiliki Writer:"

metode Apa yang dilakukan metode ini
void write(int c);
Metode ini menulis satu karakter. Jenis int dipersempit menjadi char. Bagian ekstra dibuang begitu saja.
void write(char[] cbuff);
Metode ini menulis array karakter.
void write(String s);
Metode ini menulis sebuah string. Itu hanya diubah menjadi array karakter dan kemudian metode kedua dipanggil.
void flush();
Jika aliran secara internal menyimpan data apa pun yang belum ditulis, metode ini memaksanya untuk ditulis.
void close();
Metode ini «menutup» aliran. Anda menyebutnya setelah selesai bekerja dengan aliran.
Objek kemudian melakukan operasi housekeeping yang diperlukan untuk menutup file, dll. Anda tidak dapat lagi menulis data ke aliran, dan flush dipanggil secara otomatis.

Penting untuk dipahami bahwa Reader dan Writer adalah class abstrak. Mereka tidak melakukan apa-apa dan hampir tidak mengandung kode. Semua metode mereka perlu diimplementasikan di kelas yang mewarisinya. Tugas mereka adalah untuk membakukan bagaimana kelas berinteraksi . Pengembang tidak perlu menciptakan standar mereka sendiri untuk berinteraksi satu sama lain. Jauh lebih nyaman bagi setiap orang untuk mempertahankan beberapa standar dasar. Hal ini memungkinkan kelas yang ditulis oleh pemrogram berbeda untuk dengan mudah berinteraksi tidak hanya dengan kelas yang ditulis oleh pembuat Java, tetapi juga dengan kelas yang ditulis oleh pemrogram lain.

Standar sangat kuat.

"Saya setuju. Mendukung standar umum bermanfaat bagi semua orang."