Penerangan dokumentasi API: Kelas InputStreamReader ialah jambatan daripada strim bait kepada strim aksara: ia membaca bait menggunakan set aksara yang ditentukan dan menyahkodnya kepada aksara. Set aksara yang digunakannya boleh ditetapkan dengan menentukan nama, menyatakannya secara eksplisit atau menerima set aksara lalai platform. Setiap panggilan ke kaedah read() InputStreamReader mungkin menyebabkan satu atau lebih bait dibaca daripada aliran input bait yang mendasari. Untuk mencapai penukaran bait yang cekap kepada aksara, lebih banyak bait boleh diekstrak daripada aliran asas daripada yang diperlukan untuk memenuhi operasi bacaan semasa. Untuk beroperasi dengan lebih cekap, sila pertimbangkan untuk menggunakan InputStreamReader sebagai asas dan membungkusnya dalam BufferedReader
Ia mewarisi kelas Reader
public class InputStreamReader extends Reader {}
1) Bagaimana untuk memahami jambatan daripada aliran bait ke aliran watak ?
1. Unit storan komputer ialah bait Contohnya, walaupun terdapat aksara seperti aksara Cina dalam teks txt, kepada komputer, ia wujud dalam bentuk bait
<.> 2. Bacaan strim bait ialah bacaan bait tunggal, tetapi set aksara yang berbeza memerlukan nombor yang berbeza untuk menyahkod kepada aksara, jadi bacaan strim bait akan melaporkan ralat Baca daripada strim bait untuk menyimpan Bait dan dinyahkodkan ke dalam aksara melalui set aksara dikembalikan, yang perlu dilaksanakan menggunakan aliran Ini adalah bentuk aliran aksara 4. Strim InputStreamReader memainkan peranan ini, merealisasikan penukaran daripada aliran bait kepada aksara. strim.2) Bagaimana untuk membaca bait menggunakan set aksara yang ditentukan dan menyahkodnya kepada aksara?
Bait pada asasnya ialah 8 bit perduaan, dan set aksara yang berbeza menyahkod bait yang sama untuk menghasilkan hasil aksara yang berbeza Oleh itu, pastikan anda menentukan set aksara yang sesuai apabila membaca aksara, jika tidak Kandungan yang dibaca akan menghasilkan aksara bercelaru3) Set aksara yang digunakan boleh ditentukan mengikut nama, atau ia boleh dinyatakan secara eksplisit, atau ia boleh menerima set aksara lalai bagi platform.
bermakna kelas InputStreamReader mempunyai berbilang kaedah atau berbilang pembina untuk menetapkan set aksara4) Setiap kali kaedah baca() bagi InputStreamReader dipanggil, ia boleh menyebabkan Bagaimanakah anda memahami membaca satu atau lebih bait daripada aliran input bait asas?
Kaedah baca() akan cuba membaca 2 aksara daripada strim bait asas ke dalam penimbal aksara Ambil perhatian bahawa ini adalah percubaan Jika ia menemui aksara terakhir fail, ia hanya boleh baca 1 aksara diperolehi, jadi bilangan bait yang dibaca oleh setiap kaedah read() adalah berubah-ubah5) Untuk mencapai penukaran bait yang berkesan kepada aksara, nisbah boleh diekstrak daripada asas strim Untuk memenuhi lebih banyak bait yang diperlukan untuk operasi baca semasa, sila pertimbangkan untuk membungkus InputStreamReader dalam BufferedReader
Saya belum faham perkara ini lagi Anda perlu memahami kelas BufferedReader dan membandingkan kecekapan membaca untuk mendapatkannya jawapannya 2. Kaedah pembinaan InputStreamReader 1) Gunakan set aksara lalai untuk membina aliran InputStreamReader: Intinya adalah untuk memulakan pembolehubah dalam medan contohnya dan tiada tetapan tentang aksara set dilihat
public InputStreamReader(InputStream in) { super(in); try { sd = StreamDecoder.forInputStreamReader(in, this, (String)null); } catch (UnsupportedEncodingException e) { throw new Error(e); } }2) Gunakan nama set aksara yang ditentukan untuk membina aliran InputStreamReader: intipatinya adalah untuk memulakan pembolehubah dalam domain contohnya Anda boleh mendapati bahawa set aksara ialah parameter ketiga bagi permulaan kaedah
public InputStreamReader(InputStream in, String charsetName) throws UnsupportedEncodingException { super(in); if (charsetName == null) throw new NullPointerException("charsetName"); sd = StreamDecoder.forInputStreamReader(in, this, charsetName); }3) pembolehubah sd: Pada asasnya ia adalah objek kelas StreamDecoder Kaedah pembinaan InputStreamReader adalah untuk memulakan objek ini
private final StreamDecoder sd;3 InputStreamReaderAPI1 . Kita boleh mendapati bahawa semua API kelas InputStreamReaderAPI menggunakan pembolehubah sd, jadi dapat dilihat bahawa intipati kaedah kelas InputStreamReader adalah untuk memanggil kaedah kelas StreamDecoder2 memahami kelas StreamDecoder untuk memahami bagaimana kaedah kelas InputStreamReader memainkan peranan yang besar
/** * 获取设置的字符集 */ public String getEncoding() { return sd.getEncoding(); } /** * 读取流并返回一个字符,遇到文件末尾返回-1 */ public int read() throws IOException { return sd.read(); } /** * 读取字符到字符数组的部分中,遇到文件末尾返回-1 */ public int read(char cbuf[], int offset, int length) throws IOException { return sd.read(cbuf, offset, length); } /** * 检测流是否准备好呗读取 */ public boolean ready() throws IOException { return sd.ready(); } /** * 关闭流并释放资源 */ public void close() throws IOException { sd.close(); }4 Hubungan antara kelas InputStreamReader dan kelas FileReader 1 hanya terbitan ringkas InputStreamReader dan tidak memanjangkan sebarang fungsi 2 Intipati data yang dibaca oleh kelas FileReader ialah kelas InputStreamReader, manakala data yang dibaca oleh InputStreamReader sebenarnya dibaca oleh Kelas StreamDecoder3 Oleh itu, apabila menggunakan aliran input aksara, kelas StreamDecoderlah yang sebenarnya memainkan peranan
Atas ialah kandungan terperinci Bagaimana untuk membina aliran InputStreamReader dalam JAVA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!