非原創(chuàng)摩泪。
一、BufferedReader類
所屬類庫:
java.lang.Object
java.io.Reader
java.io.BufferedReader
基本概念 :
public class BufferedReader extends Reader
從字符輸入流中讀取文本劫谅,緩沖各個(gè)字符见坑,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取捏检。 可以指定緩沖區(qū)的大小鳄梅,或者可使用默認(rèn)的大小。大多數(shù)情況下未檩,默認(rèn)值足夠大戴尸。
通常, Reader 所作的每個(gè)讀取請(qǐng)求都會(huì)導(dǎo)致對(duì)底層字符或字節(jié)流進(jìn)行相應(yīng)的讀取請(qǐng)求冤狡。因此孙蒙,建議用 BufferedReader 包裝所有其 read() 操作可能開銷很高的 Reader (如 FileReader 和 InputStreamReader )项棠。
BufferedReader 流能夠讀取文本行 , 通過向 BufferedReader 傳遞一個(gè) Reader 對(duì)象 , 來創(chuàng)建一個(gè) BufferedReader 對(duì)象 , 之所以這樣做是因?yàn)?FileReader 沒有提供讀取文本行的功能 .
Demo :
通過 Bufferedreader 捕獲所輸入的語句 :
Java代碼
import java.io.*;
class BufferedReaderDemo{
public static void main(String[] args)throws IOException {
BufferedReader bufferedReader =new BufferedReader(
new InputStreamReader(System.in));
System.out.print("請(qǐng)輸入一系列文字,可包括空格:");
String text =bufferedReader.readLine();
System.out.println("請(qǐng)輸入文字:"+text);
}
}
注解:
throws IOException 拋出異常
InputStreamReader 是字節(jié)流通向字符流的橋梁
二挎峦、InputStreamReader類
InputStreamReader 將字節(jié)流轉(zhuǎn)換為字符流香追。是字節(jié)流通向字符流的橋梁。如果不指定字符集編碼坦胶,該解碼過程將使用平臺(tái)默認(rèn)的字符編碼透典,如:GBK。
構(gòu)造方法 :
Java代碼
InputStreamReader isr = new InputStreamReader(InputStream in);
//構(gòu)造一個(gè)默認(rèn)編碼集的InputStreamReader類
InputStreamReader isr = new InputStreamReader(InputStream in,String charsetName);
//構(gòu)造一個(gè)指定編碼集的InputStreamReader類顿苇。
參數(shù) in對(duì)象通過 InputStream in = System.in;獲得峭咒。用來讀取鍵盤上的數(shù)據(jù)〖退辏或者 InputStream in = new FileInputStream(String fileName);此用來讀取文件中的數(shù)據(jù)凑队。可以看出 FileInputStream 為InputStream的子類幔翰。
主要方法 :
int read();//讀取單個(gè)字符漩氨。
int read(char []cbuf);//將讀取到的字符存到數(shù)組中。返回讀取的字符數(shù)遗增。
Demo: Java代碼
import java.io.*;
class InputStreamReaderDemo {
public static void transReadNoBuf() throws IOException {
/**
* 沒有緩沖區(qū)叫惊,只能使用read()方法。
*/
//讀取字節(jié)流
//InputStream in = System.in;//讀取鍵盤的輸入做修。
InputStream in = new FileInputStream("D:\\demo.txt");//讀取文件的數(shù)據(jù)赋访。
//將字節(jié)流向字符流的轉(zhuǎn)換。要啟用從字節(jié)到字符的有效轉(zhuǎn)換缓待,
//可以提前從底層流讀取更多的字節(jié).
InputStreamReader isr = new InputStreamReader(in);//讀取
//綜合到一句蚓耽。
//InputStreamReader isr = new InputStreamReader(
//new FileInputStream("D:\\demo.txt"));
char []cha = new char[1024];
int len = isr.read(cha);
System.out.println(new String(cha,0,len));
isr.close();
}
public static void transReadByBuf() throws IOException {
/**
* 使用緩沖區(qū) 可以使用緩沖區(qū)對(duì)象的 read() 和 readLine()方法。
*/
//讀取字節(jié)流
//InputStream in = System.in;//讀取鍵盤上的數(shù)據(jù)
InputStream in = new FileInputStream("D:\\demo.txt");//讀取文件上的數(shù)據(jù)旋炒。
//將字節(jié)流向字符流的轉(zhuǎn)換步悠。
InputStreamReader isr = new InputStreamReader(in);//讀取
//創(chuàng)建字符流緩沖區(qū)
BufferedReader bufr = new BufferedReader(isr);//緩沖
//BufferedReader bufr = new BufferedReader(
//new InputStreamReader(new FileInputStream("D:\\demo.txt")));可以綜合到一句。
/*int ch =0;
ch = bufr.read();
System.out.println((char)ch);
*/
String line;
while((line = bufr.readLine())!=null){
System.out.println(line);
}
isr.close();
}
}
三瘫镇、InputStreamReader鼎兽、BufferedReader真實(shí)案例(非編碼集)
Java代碼
import java.io.*;
class UtilResource {
private void initializeResource() {
try {
//讀取文件,并且以u(píng)tf-8的形式寫出去
BufferedReader bufread;
String read;
bufread = new BufferedReader(new InputStreamReader(ResourceHelper
.getResourceInputStream("pinyin.txt")));
while ((read = bufread.readLine()) != null) {
System.out.println(read);
}
bufread.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
*注:其中 pinyin.txt 放于項(xiàng)目的根目錄下 *
Java代碼
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-generated catch block
e.printStackTrace();
}
return null;
}
}