1. Kelas BufferedReader
. Perpustakaan Kelas:
java.lang.Object
java.io.reader
java.io.bufferedReader
. Konsep Dasar:
BufferedReader kelas publik memperluas pembaca
Baca teks dari stream input karakter dan buffer karakter individu, sehingga memungkinkan pembacaan karakter, array, dan garis yang efisien. Anda dapat menentukan ukuran buffer, atau ukuran default dapat digunakan. Dalam kebanyakan kasus, nilai default cukup besar.
Biasanya, setiap permintaan baca yang dibuat oleh pembaca menghasilkan permintaan baca yang sesuai untuk karakter yang mendasari atau aliran byte. Oleh karena itu, disarankan untuk membungkus semua pembaca yang operasinya dibaca () bisa mahal (seperti filereader dan inputStreamReader) dengan BufferedReader.
Stream BufferedReader dapat membaca baris teks dan membuat objek BufferedReader dengan meneruskan objek pembaca ke bufferedReader. Ini karena filereader tidak menyediakan fungsi membaca baris teks.
. Demo:
Tangkap pernyataan yang dimasukkan melalui BufferedReader:
impor java.io.*; kelas bufferedReadDemo {public static void main (string [] args) melempar ioException {buferedReader buferedReader = baru bufferedReader (inputStreamReader baru (System.in)); System.out.print ("Silakan masukkan serangkaian teks, yang dapat mencakup spasi:"); Teks String = BufferedReader.readline (); System.out.println ("Harap masukkan teks:"+teks); }}anotasi:
melempar IoException melempar pengecualian
InputStreamReader adalah jembatan antara aliran byte dan aliran karakter
2. Kelas InputStreamReader
InputStreamReader mengubah aliran byte ke aliran karakter. Ini adalah jembatan antara aliran byte dan aliran karakter. Jika pengkodean set karakter tidak ditentukan, proses decoding akan menggunakan pengkodean karakter default platform, seperti: GBK.
Metode Konstruksi:
InputStreamReader ISR = InputStreamReader baru (inputStream in); // Bangun kelas InputStreamReader dengan set penyandian default default
InputStreamReader isr = inputStreamReader baru (inputStream in, string charsetName); // Bangun set pengkodean yang ditentukan
Kelas InputStreamReader.
Parameter dalam objek diperoleh dengan inputStream in = system.in;. // Baca data di keyboard.
Atau inputStream in = new FileInputStream (string fileName); // Baca data dalam file. Dapat dilihat bahwa FileInputStream adalah subclass dari InputStream.
Metode utama: int read (); // Baca satu karakter.
int baca (char [] cbuf); // simpan karakter baca ke dalam array. Mengembalikan jumlah karakter yang dibaca.
. Demo:
Impor java.io.*; class inputStreamReadDemo {public static void transReadnobuf () melempar ioException { /*** Tidak ada buffer, Anda hanya dapat menggunakan metode baca (). */// Baca aliran byte // inputStream in = system.in; // Baca input keyboard. InputStream di = FileInputStream baru ("d: //demo.txt"); // Baca data file. // Konversi byte yang mengalir ke aliran karakter. Untuk mengaktifkan konversi yang efektif dari byte ke karakter, // Anda dapat membaca lebih banyak byte dari aliran yang mendasarinya sebelumnya. InputStreamReader ISR = InputStreamReader baru (IN); // Baca // komprehensif menjadi satu kalimat. // inputStreamReader isr = new InputStreamReader (// new fileInputStream ("d: //demo.txt")); char [] cha = char baru [1024]; int len = isr.read (cha); System.out.println (string baru (cha, 0, len)); isr.close (); } public static void transReadByBuf () melempar ioException { /*** Gunakan buffer untuk menggunakan metode baca () dan readline () dari objek buffer. */// Baca Byte Stream // InputStream in = System.in; // Baca data pada inputStream keyboard di = FileInputStream baru ("d: //demo.txt"); // Baca data pada file. // Konversi byte yang mengalir ke aliran karakter. InputStreamReader isr = new InputStreamReader(in);//Read//Create character stream buffer BufferedReader bufr = new BufferedReader(isr);//Buffered//BufferedReader bufr = new BufferedReader( //new InputStreamReader(new FileInputStream("D://demo.txt"))); dapat digabungkan menjadi satu kalimat. /*int ch = 0; ch = bufr.read (); System.out.println ((char) ch); */ Garis string; while ((line = bufr.readline ())! = null) {System.out.println (line); } isr.close (); }}3. Kasus Nyata InputStreamReader dan BufferedReader (set non-kode)
Impor java.io.*; kelas utilResource {private void initializeresource () {coba {// baca file dan tuliskan dalam bentuk BufferedReader Buffered UTF-8; String baca; BuFread = BufferedReader baru (inputStreamReader baru (ResourceHelper .getResourceInputStream ("pinyin.txt"))); while ((baca = bufread.readline ())! = null) {System.out.println (baca); } bufread.close (); } catch (FileNotFoundException ex) {ex.printstacktrace (); } catch (ioException ex) {ex.printstacktrace (); }}}Catatan: pinyin.txt ditempatkan di direktori root proyek
import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;class ResourceHelper { /** * @param resourceName * @return * @return */ static BufferedInputStream getResourceInputStream(String resourceName) { try { return new BufferedInputStream(new FileInputStream (ResourCename)); } catch (FileNoTFoundException e) {// TODO Auto-Encoerated Catch Block E.PrintStackTrace (); } return null; }}Meringkaskan:
Kelas InputStreamReader
Ini adalah jembatan antara aliran byte dan aliran karakter, melampirkan inputstream di dalam. Ini membaca karakter satu per satu pada satu waktu di tingkat yang lebih tinggi, input/output dalam format teks, dan dapat menentukan format pengkodean;
Kelas BufferedReader
BufferedReader diperluas oleh kelas pembaca, memberikan pembacaan teks buffered umum, dan memberikan readline yang sangat praktis, yang membaca baris teks, membaca teks dari aliran input karakter, dan buffer setiap karakter, sehingga memberikan bacaan karakter, array, dan garis yang efisien.
PS: Hubungan antara InputStream, InputStreamReader dan pembaca
InputStream: Hasilnya adalah aliran input byte. Setelah inputStream.read ("nama file"), hasilnya adalah aliran byte.
Pembaca: Membaca Aliran Karakter
InputStreamReader: Jembatan dari byte ke karakter. InputStreamReader (inputStream.read ("fileName"));
reader.read (inputStreamReader (inputStream in)); dapat diubah dari byte ke karakter, dan dicetak dan ditampilkan.
java.io.reader dan java.io.inputstream membentuk kelas input java.
Pembaca digunakan untuk membaca karakter 16-bit, yaitu karakter yang dikodekan unicode; Sementara InputStream digunakan untuk membaca karakter ASCII dan data biner.
Pembaca mendukung output karakter unicode 16-bit, dan InputStream mendukung output karakter 8-bit.
Pembaca dan InputStream adalah dua set mekanisme tingkat paralel dan independen yang disediakan oleh Perpustakaan I/O, masing -masing. 1byte = 8bits InputStream dan OutputStream digunakan untuk memproses aliran 8-bit, dan pembaca dan penulis digunakan untuk memproses aliran 16-bit.
Dalam bahasa Java, tipe byte adalah 8-bit dan jenis char adalah 16-bit, jadi Anda perlu menggunakan pembaca dan penulis saat memproses bahasa Mandarin.
Perlu dicatat bahwa di bawah dua tingkat mekanisme ini, ada juga jembatan InputStreamReader dan OutputStreamWriter, yang bertanggung jawab atas adaptasi inputstream ke pembaca dan adaptasi outputstream ke penulis.
Di Java, ada berbagai jenis aliran input pembaca yang sesuai dengan sumber data yang berbeda:
Filereader digunakan untuk dimasukkan dari file; ChararrayReader digunakan untuk dimasukkan dari array karakter dalam program; StringReader digunakan untuk memasukkan dari string dalam program; PipedReader digunakan untuk membaca data yang ditulis ke pipa dari PipedWriter di utas lain.
Ada juga berbagai jenis aliran input InputStream yang sesuai dengan sumber data yang berbeda: FileInputStream, ByTeArrayInputStream, StringBufferInputStream, PipedInputStream.
Selain itu, ada dua aliran input inputstream yang tidak memiliki tipe pembaca yang sesuai: soket digunakan untuk soket; URLConnection digunakan untuk koneksi URL. Kedua kelas ini menggunakan getInputStream () untuk membaca data.
Sejalan dengan itu, ada perbedaan yang sama antara java.io.writer dan java.io.outputstream.
Mengenai inputStream.read (byte [] b) dan inputStream.read (byte [] b, int off, int len) Kedua metode digunakan untuk membaca beberapa byte dari aliran. Pemrogram yang berpengalaman akan menemukan bahwa kedua metode ini sering tidak dapat membaca jumlah byte yang ingin mereka baca. Sebagai contoh, dalam metode pertama, pemrogram sering berharap bahwa program dapat membaca byte b.length, tetapi situasi sebenarnya adalah bahwa sistem sering tidak dapat membaca begitu banyak. Setelah dengan cermat membaca instruksi Java API, Anda akan menemukan bahwa metode ini tidak menjamin bahwa ia dapat membaca begitu banyak byte, ia hanya dapat menjamin bahwa ia dapat membaca begitu banyak byte (setidaknya 1). Oleh karena itu, jika Anda ingin program membaca byte hitungan, yang terbaik adalah menggunakan kode berikut:
byte [] b = byte baru [hitungan]; int readcount = 0; // Jumlah byte yang telah berhasil dibaca sementara (readCount <count) {readCount += in.read (byte, readCount, count - readCount); } Kode ini dapat memastikan bahwa penghitungan byte dibaca kecuali pengecualian IO ditemui di tengah atau akhir aliran data (eofexception)