Pada bagian sebelumnya kita mempelajari tentang aliran input dan output byte file serta aliran input dan output karakter file. Pada bagian ini kita mempelajari konsep baru - aliran buffer . Jadi apa itu aliran buffered? Peran apa yang dapat dimainkan oleh aliran buffer?
Di Java, kami menyebut objek yang dibuat oleh kelas BufferedReader dan BufferedWriter sebagai aliran input dan output buffer, yang meningkatkan kemampuan membaca dan menulis file. Misalnya, Student.txt adalah daftar siswa, dengan setiap nama menempati satu baris. Jika kita ingin membaca namanya, kita harus membaca satu baris pada satu waktu. Sulit untuk menyelesaikan tugas seperti itu menggunakan aliran FileReader, karena kita tidak tahu berapa banyak karakter yang ada dalam satu baris, dan kelas FileReader tidak tahu berapa banyak karakter yang ada dalam satu baris. menyediakan metode untuk membaca sebuah baris.
Java menyediakan aliran yang lebih canggih: aliran BufferedReader dan aliran BufferedWriter. Sumber dan tujuan keduanya harus berupa aliran masukan karakter dan aliran keluaran karakter. Oleh karena itu, jika aliran masukan karakter file digunakan sebagai sumber aliran BufferedReader, dan aliran keluaran karakter file digunakan sebagai tujuan aliran BufferedWriter, maka aliran yang dibuat oleh kelas BufferedReader dan BufferedWriter akan memiliki kemampuan membaca dan menulis yang lebih kuat. kemampuan daripada aliran input karakter dan kemampuan aliran output karakter. Misalnya, aliran BufferedReader dapat membaca file baris demi baris.
Konstruktor kelas BufferedReader dan BufferedWriter adalah:
BufferedReader(Readerin);BufferedWriter(Writerout);
Aliran BufferedReader dapat membaca baris teks menggunakan readLine() . Buat objek BufferedReader dengan meneruskan objek subkelas Reader, seperti instance FileReader, ke BufferedReader, misalnya:
FileReaderinOne=newFileReader(Student.txt);BufferedReaderinTwo=BufferedReader(inOne);
Kemudian aliran inTwo memanggil metode readLine() untuk membaca Student.txt, misalnya:
StringstrLine=inTwo.readLine();
Demikian pula, Anda dapat menghubungkan aliran BufferedWriter dan aliran FileWriter bersama-sama, lalu menggunakan aliran BufferedWriter untuk menulis data ke tujuan, misalnya:
FileWritertofile=newFileWriter(hello.txt);BufferedWriterout=BufferedWriter(tofile);
Kemudian out menggunakan metode write(String s, int off, int len) dari kelas BufferedReader untuk menulis string s ke hello.txt. Parameter off adalah offset dari awal s, dan len adalah jumlah karakter yang ditulis .
Selain itu, aliran BufferedWriter memiliki metode unik dalam menulis karakter baris baru ke file:
baris baru();
BufferedReader dan BufferedWriter dapat disebut sebagai aliran atas, dan aliran karakter yang ditunjuknya disebut aliran yang mendasarinya. Java menggunakan teknologi caching untuk menghubungkan aliran atas dan aliran yang mendasarinya. Aliran masukan karakter yang mendasarinya pertama-tama membaca data ke dalam cache, aliran BufferedReader kemudian membaca data dari cache; aliran BufferedWriter menulis data ke dalam cache, dan aliran keluaran karakter yang mendasarinya terus-menerus menulis data dalam cache ke tujuan. . Ketika aliran BufferedWriter memanggil flush() untuk menyegarkan cache atau memanggil metode close() untuk menutup, meskipun cache tidak meluap, aliran yang mendasarinya akan segera menulis konten yang di-cache ke tujuan.
Catatan : Saat menutup aliran keluaran, Anda harus menutup aliran keluaran yang di-buffer terlebih dahulu, lalu menutup aliran yang ditunjukkan oleh aliran keluaran yang di-buffer, yaitu, tutup dulu aliran atas, lalu tutup aliran bawah. Tutup saja aliran atas saat menulis kode, dan aliran yang mendasari aliran atas akan ditutup secara otomatis.
Misalnya:
File english.txt yang terdiri dari kalimat bahasa Inggris adalah sebagai berikut, setiap kalimat menempati satu baris:
Panahnya meleset dari sasaran. Mereka menolak permintaan serikat pekerja. Ke mana jalan ini menuju?
Diperlukan untuk membaca english.txt baris demi baris, menambahkan jumlah kata yang terkandung dalam kalimat bahasa Inggris setelah baris tersebut, dan kemudian menulis baris tersebut ke dalam file bernama englishCount.txt. Kodenya adalah sebagai berikut:
importjava.io.*;importjava.util.*;publicclassMain{publicstaticvoidmain(Stringargs[]){FilefRead=newFile(english.txt);FilefWrite=newFile(englishCount.txt);try{Writerout=newFileWriter(fWrite);BufferedWriterbufferWrite= newBufferedWriter(keluar);Readerin=newFileReader(fRead);BufferedReaderbufferRead=newBufferedReader(in);Stringstr=null; while((str=bufferRead.readLine())!=null){StringTokenizerfenxi=newStringTokenizer(str);intcount=fenxi. countTokens();str=str+jumlah kata dalam kalimat:+count;bufferWrite.write(str);bufferWrite.newLine();}bufferWrite.close();out.close();in=newFileReader(fWrite) ;bufferRead =newBufferedReader(dalam);Strings=null;System.out.println(fWrite.getName()+content:); while((s=bufferRead.readLine())!=null){System.out.println( s) ;}bufferRead.close();in.close();}catch(IOExceptione){System.out.println(e.toString());}}}
Hasil yang berjalan adalah sebagai berikut:
englishCount.txt isi:Panah meleset dari target.Jumlah kata dalam kalimat:5Mereka menolak permintaan persatuan.Jumlah kata dalam kalimat:5Di mana jalan ini menuju?Jumlah kata dalam kalimat:6