緩沖流是為了讀取和寫入的速度醒陆,提高效率主要包括:字節(jié)緩沖流和字符緩沖流
字節(jié)緩沖流:
根據(jù)流的方向,共有2個:字節(jié)緩沖輸出流BufferedOutputStream和字節(jié)緩沖輸入流BufferedInputStream,它們的內(nèi)部都包含了一個緩沖區(qū)剧董,通過緩沖區(qū)讀寫,就可以提高了IO流的讀寫速度
構(gòu)造方法:public BufferedOutputStream(OutputStream out);
//創(chuàng)建基本的字節(jié)輸出流
FileOutputStream fileOut=newFileOutputStream("abc.txt");
//使用高效的流跳座,把基本的流進行封裝,實現(xiàn)速度的提升
BufferedOutputStream out=newBufferedOutputStream(fileOut);
//2泣矛,寫數(shù)據(jù)
out.write("hello".getBytes());
//3疲眷,關閉流
out.close();
}
構(gòu)造方法:public BufferedInputStream(InputStream in);
FileInputStream fileIn =newFileInputStream("abc.txt");
//把基本的流包裝成高效的流
BufferedInputStream in =newBufferedInputStream(fileIn);
//2您朽,讀數(shù)據(jù)
int?ch = -1;
while( (ch = in.read()) != -1 ) {
//打印
System.out.print((char)ch);
}
//3狂丝,關閉
in.close();
高效的實現(xiàn)復制文件;
BufferedInputStream in =newBufferedInputStream(newFileInputStream("c:\\a.txt"));
//2哗总,指定目的地
BufferedOutputStream out=newBufferedOutputStream(newFileOutputStream("c:\\b.txt"));
//3几颜,讀數(shù)據(jù)
byte[] buffer =newbyte[1024];
intlen = -1;
while( (len = in.read(buffer)) != -1) {
//4,寫數(shù)據(jù)
out.write(buffer, 0, len);
}
//5,關閉流
in.close();
out.close();
字符緩沖流:
字符緩沖輸入流BufferedReader讯屈。字符緩沖輸出流BufferedWriter
BufferedWriter
//創(chuàng)建流
//基本字符輸出流
FileWriter fileOut =newFileWriter("file.txt");
//把基本的流進行包裝
BufferedWriter out =newBufferedWriter(fileOut);
//2蛋哭,寫數(shù)據(jù)
for(inti=0; i<5; i++) {
out.write("hello");
out.newLine();//寫入換行
}
//3,關閉流
out.close();
}
BufferedReader
從字符輸入流中讀取文本,緩沖各個字符涮母,從而實現(xiàn)字符谆趾、數(shù)組和行的高效讀取。
publicStringreadLine()讀取一個文本行叛本,包含該行內(nèi)容的字符串沪蓬,不包含任何行終止符,如果已到達流末尾来候,則返回null
//1,創(chuàng)建流
BufferedReader in =newBufferedReader(newFileReader("file.txt"));
//2跷叉,讀數(shù)據(jù)
//一次讀取文本中一行的字符串內(nèi)容
String line =null;
while( (line = in.readLine()) !=null){
System.out.println(line);
}
//3,關閉流
in.close();
使用緩沖流高效的完成文件的復制
//1,指定數(shù)據(jù)源,是數(shù)據(jù)源中讀數(shù)據(jù)云挟,采用輸入流
BufferedReader in =newBufferedReader(newFileReader("file.txt"));
//2,指定目的地峡眶,是把數(shù)據(jù)寫入目的地,采用輸出流
BufferedWriter out =newBufferedWriter(newFileWriter("copyFile.txt"));
//3,讀數(shù)據(jù)
String line =null;
while( (line = in.readLine()) !=null) {
//4植锉,寫數(shù)據(jù)
out.write(line);
//寫入換行符號
out.newLine();}
//5辫樱,關閉流
out.close(); in.close();
}
這么多流該如何選擇:
目的設備:
硬盤:文件File開頭。
內(nèi)存:數(shù)組俊庇,字符串狮暑。
屏幕:System.out
網(wǎng)絡:Socket
完全可以明確具體要使用哪個流對象。
知識點總結(jié)
字節(jié)流
字節(jié)輸入流InputStream
FileInputStream操作文件的字節(jié)輸入流
BufferedInputStream高效的字節(jié)輸入流
字節(jié)輸出流OutputStream
FileOutputStream操作文件的字節(jié)輸出流
BufferedOutputStream高效的字節(jié)輸出流
字符流
字符輸入流Reader
FileReader操作文件的字符輸入流
BufferedReader高效的字符輸入流
InputStreamReader輸入操作的轉(zhuǎn)換流(把字節(jié)流封裝成字符流)
字符輸出流Writer
FileWriter操作文件的字符輸出流
BufferedWriter高效的字符輸出流
OutputStreamWriter輸出操作的轉(zhuǎn)換流(把字節(jié)流封裝成字符流)
方法:
讀數(shù)據(jù)方法:
read()一次讀一個字節(jié)或字符的方法
read(byte[]char[])一次讀一個數(shù)組數(shù)據(jù)的方法
readLine()一次讀一行字符串的方法(BufferedReader類特有方法)
readObject()從流中讀取對象(ObjectInputStream特有方法)
寫數(shù)據(jù)方法:
write(int)一次寫一個字節(jié)或字符到文件中
write(byte[] char[])一次寫一個數(shù)組數(shù)據(jù)到文件中
write(String)一次寫一個字符串內(nèi)容到文件中
uwriteObject(Object )寫對象到流中(ObjectOutputStream類特有方法)
unewLine()寫一個換行符號(BufferedWriter類特有方法)
向文件中寫入數(shù)據(jù)的過程
1辉饱,創(chuàng)建輸出流對象
2搬男,寫數(shù)據(jù)到文件
3,關閉輸出流
從文件中讀數(shù)據(jù)的過程
1彭沼,創(chuàng)建輸入流對象
2缔逛,從文件中讀數(shù)據(jù)
3,關閉輸入流
l文件復制的過程
1姓惑,創(chuàng)建輸入流(數(shù)據(jù)源)
2褐奴,創(chuàng)建輸出流(目的地)
3,從輸入流中讀數(shù)據(jù)
4于毙,通過輸出流敦冬,把數(shù)據(jù)寫入目的地
5,關閉流
?