Pertama, izinkan saya memperkenalkan perbedaan antara inputStreamReader dan filereader. Konten spesifiknya adalah sebagai berikut:
InputStreamReader dan BufferedReader. Kelas yang paling penting di antara mereka adalah InputStreamReader, yang merupakan jembatan untuk mengubah byte menjadi karakter. Anda dapat menentukan ulang metode pengkodean dalam konstruktor. Jika tidak ditentukan, metode pengkodean default dari sistem operasi yang mendasarinya akan diadopsi, seperti GBK, dll.
Filereader dan InputStreamReader melibatkan konversi pengkodean (tentukan metode pengkodean atau gunakan pengkodean OS default), dan kode kacau dapat terjadi pada platform yang berbeda! FileInputStream diproses dalam mode biner dan tidak akan memiliki kode kacau.
FileInputStream Byte Stream dibaca byte byte.
Aliran karakter filereader dibaca sebagai karakter satu per satu.
BufferedReader bufreader = null; inputStreamReader isr = null; filereader fr = null; coba {untuk (string fileName: fileNames) {Metode 1: isr = new InputStreamReader (fileinputStream baru ("d: /test.txt"), "utf-8"); BuFreader = BufferedReader baru (ISR); Metode 2: fr = filereader baru ("d: /test.txt"); BuFreader = BufferedReader baru (FR); while (bufreader.ready ()) {// 1. Dapatkan setiap baris data string dataline = bufreader.readline (); }}Perbedaan antara inputstream dan pembaca
Ada dua kelas abstrak di bawah java.io: inputstream dan pembaca
InputStream adalah superclass yang mewakili semua kelas aliran input byte.
Pembaca adalah kelas abstrak untuk membaca aliran karakter
InputStream menyediakan pembacaan aliran byte, bukan pembacaan teks, yang merupakan perbedaan mendasar antara itu dan kelas pembaca.
Artinya, array atau string char dibaca menggunakan pembaca, dan array byte dibaca menggunakan inputstream.
Setelah mengklarifikasi perbedaan mendasar antara dua superclass, mari kita lihat penggunaan subkelas mereka di bawah ini. Berikut adalah beberapa penjelasan yang paling umum digunakan
Inputstream
| __FileInputStream
FileInputStream mendapatkan byte input dari file dalam sistem file.
Ringkasan Metode Konstruksi
FileInputStream (File File)
Buat FileInputStream dengan membuka koneksi ke file aktual, yang ditentukan oleh file objek file dalam sistem file.
FileInputStream (FileDeScriptor FDOBJ)
Buat FileInputStream dengan menggunakan deskriptor file FDOBJ, yang mewakili koneksi yang ada ke file aktual dalam sistem file.
FileInputStream (nama string)
Buat FileInputStream dengan membuka koneksi ke file aktual, ditentukan oleh nama pathname di sistem file.
Pembaca
|-BufferedReader
| ___ InputStreamReader
| __Filereader
BufferedReader: Baca teks dari aliran input karakter dan buffer karakter individu, sehingga memungkinkan pembacaan karakter, array, dan garis yang efisien.
Ringkasan Metode Konstruksi
BufferedReader (pembaca di)
Membuat aliran input karakter buffered yang menggunakan buffer input ukuran default.
BufferedReader (pembaca di, int sz)
Membuat aliran input karakter buffered yang menggunakan buffer input ukuran yang ditentukan.
BufferedReader (Platform Java SE 6)
Fitur terbesar dari BufferedReader adalah pengaturan buffer. Biasanya setiap permintaan baca yang dibuat oleh pembaca akan menghasilkan permintaan baca yang sesuai untuk karakter yang mendasari atau aliran byte. Jika tidak ada buffering, setiap panggilan untuk membaca () atau readline () akan menghasilkan byte yang dibaca dari file dan mengubahnya menjadi karakter dan mengembalikannya, yang sangat tidak efisien.
Gunakan BufferedReader untuk menentukan ukuran buffer, atau ukuran default dapat digunakan. Dalam kebanyakan kasus, nilai default cukup besar.
Oleh karena itu, disarankan untuk membungkus semua pembaca yang operasinya dibaca () mungkin mahal (seperti filereader dan inputStreamReader) dengan BufferedReader.
Misalnya,
BufferedReader di = BufferedReader baru (filereader baru ("foo.in"));Input buffer ke file yang ditentukan.
InputStreamReader (Platform Java SE 6)
InputStreamReader adalah jembatan antara aliran byte dan aliran karakter: membaca byte menggunakan charset yang ditentukan dan mendekodenya menjadi karakter. Set karakter yang digunakannya dapat ditentukan atau secara eksplisit diberikan dengan nama, atau dapat menerima set karakter default platform.
Ringkasan Metode Konstruksi
InputStreamReader (InputStream in) membuat inputStreamReader yang menggunakan set karakter default. InputStreamReader (InputStream in, Charset CS) membuat inputStreamReader yang menggunakan set karakter yang diberikan. InputStreamReader (InputStream In, CharsetDecoder DEC) membuat inputStreamReader yang menggunakan decoder set karakter yang diberikan. InputStreamReader (InputStream in, String CharsetName) membuat inputStreamReader yang menggunakan set karakter yang ditentukan.
Setiap panggilan ke metode baca () dalam inputStreamReader menghasilkan satu atau lebih byte yang dibaca dari aliran input yang mendasarinya. Untuk mengaktifkan konversi yang efektif dari byte ke karakter, Anda dapat membaca lebih banyak byte dari aliran yang mendasarinya sebelumnya, melebihi byte yang diperlukan untuk memenuhi operasi baca saat ini.
Untuk mencapai efisiensi maksimum, pertimbangkan untuk membungkus inputStreamReader di dalam bufferedReader. Misalnya:
BufferedReader di = BufferedReader baru (InputStreamReader baru (System.in));
Fitur terbesar dari InputStreamReader adalah dapat merujuk pada format pengkodean tetap dari konversi, yang tidak dimungkinkan dengan kelas lain. Itu dapat dilihat dari metode konstruksi. Ini sangat berguna saat membaca karakter Cina.
Filereader
1) Pengantar Kelas Filereader:
Subkelas dari kelas InputStreamReader, semua metode (baca (), dll.) Diwarisi dari kelas induk inputStreamReader;
2) Perbedaan dari kelas InputStreamReader:
Ringkasan Metode Konstruksi
Filereader (file file)
Buat filereader baru yang diberikan file dari mana data dibaca.
Filereader (FileDescriptor FD)
Buat filereader baru yang diberikan fileDeScriptor dari mana data dibaca.
Filereader (nama file string)
Buat filereader baru yang diberikan nama file dari mana data dibaca
Perbedaan utama antara kelas ini dan inputStreamReader kelas induknya adalah konstruktor, dan perbedaan utamanya adalah konstruktor!
Dari konstruktor InputStreamReader, parameternya adalah metode inputstream dan pengkodean. Dapat dilihat bahwa ketika Anda ingin menentukan metode pengkodean, kelas InputStreamReader harus digunakan; dan parameter konstruktor filereader sama dengan FileInputStream, yang merupakan objek file atau string yang mewakili jalur. Dapat dilihat bahwa ketika Anda ingin membaca file berdasarkan objek file atau string, gunakan filereader;
Saya pikir fungsi subclass filereader terletak di pembagian kerja kecil ini. Perbedaan utama antara kelas ini dan inputStreamReader kelas induknya adalah konstruktor, dan perbedaan utamanya adalah konstruktor!
Dari InputStreamReader
Dalam konstruktor, parameternya adalah metode inputstream dan pengkodean. Dapat dilihat bahwa ketika Anda ingin menentukan metode pengkodean, kelas InputStreamReader harus digunakan; dan parameter konstruktor filereader sama dengan FileInputStream, yang merupakan objek file atau string yang mewakili jalur. Dapat dilihat bahwa ketika Anda ingin membaca file berdasarkan objek file atau string, gunakan filereader;
Saya pikir fungsi subclass filereader terletak di pembagian kerja kecil ini.
Dua koneksi dan perbedaan
(1) Karakter dan byte:
Kelas FileInputStream menggunakan input/output biner, dan kecepatan I/O cepat dan efisien, tetapi metode baca () membaca byte (data biner), yang sangat tidak menguntungkan bagi orang untuk membaca, dan tidak dapat secara langsung beroperasi pada karakter dalam file, seperti penggantian dan pencarian (itu harus dioperasikan di byte);
Kelas pembaca menebus cacat ini dan dapat memasukkan/output dalam format teks, yang sangat nyaman; Misalnya, Anda dapat menggunakan loop while ((ch = filereader.read ())! =-1) untuk membaca file; Anda dapat menggunakan metode BufferedReader's Readline () untuk membaca baris berdasarkan baris.
(2) Pengkodean
InputStreamReader, itu adalah jembatan untuk mengubah byte menjadi karakter. Anda dapat menentukan ulang metode pengkodean dalam konstruktor. Jika tidak ditentukan, metode pengkodean default dari sistem operasi yang mendasarinya akan diadopsi, seperti GBK, dll.
Filereader dan InputStreamReader melibatkan konversi pengkodean (tentukan metode pengkodean atau gunakan pengkodean OS default), dan kode kacau dapat terjadi pada platform yang berbeda! FileInputStream diproses dalam mode biner dan tidak akan memiliki kode kacau.
Oleh karena itu, ketika menentukan metode pengkodean, kelas InputStreamReader harus digunakan, jadi itu adalah jembatan untuk mengubah byte menjadi karakter;
(3) Area cache
Kelas BufferReader digunakan untuk membungkus semua pembaca yang operasinya dibaca () mungkin mahal (seperti filereader dan inputStreamReader).
(4) Penggunaan standar
Ringkas di atas dan muncul dengan penggunaan standar yang lebih baik:
1) file file = file baru ("hello.txt");
FileInputStream di = FileInputStream baru (file);
2) file file = file baru ("hello.txt");
FileInputStream di = FileInputStream baru (file); InputStreamReader inreader = inputStreamReader baru (dalam, "UTF-8"); Bufferedreader bufreader = new bufferedreader (inreader);
3) file file = file baru ("hello.txt");
Filereader filereader = filereader baru (file); BufferedReader bufreader = BufferedReader baru (filereader);