
緩沖流
1、緩沖流要套接在相應的節(jié)點流之上,對讀寫的數(shù)據(jù)提供了緩沖的功能,提高了讀寫的效率,同時增加了一些新的方法。
注:因為增加了韓緩沖,可以減少訪問硬盤的次數(shù),從而保護我們的硬盤。
提供了四種緩沖流。構造方法有:
BufferReader (Reader in)
BufferedReader(Reader in, int size) //size為自定義的緩存區(qū)的大小
BufferedWriter(Writer out)
BufferedWriter(Writer out, int size)
BufferedInputStream(InputStream in)
BufferedInputStream(InputStream in, int size)
BufferedOutputStream(OutputStream out)
BufferedOutputStream(OutputStream out, int size)
緩沖輸入流支持父類的mark和reset方法。。
BufferedReader提供了readLine方法用于讀取一行字符串(以\r或\n分隔)
BufferedWriter提供了newLine用于寫入一個新的行分隔符。
對于輸出的緩沖流,寫出的數(shù)據(jù)會現(xiàn)在內存中緩存,使用flush方法將會使內存中的數(shù)據(jù)立刻寫出。
關于關閉處理流:
寫了一個小程序,剛開始節(jié)點流和處理流都沒有關閉,然后本來要寫入文件的東西一個都沒有寫入。
后來寫了只是關閉節(jié)點流,然后要寫入文件的東西也是一個都沒有寫入。
最后只是關閉處理流,程序達到預期運行效果。
然后測試了一下既關閉節(jié)點流又關閉處理流,程序報錯
import java.io.*;
public class TestBufferedStream {
public static void main(String[] args) {
FileInputStream fis = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
int c;
fis = new FileInputStream("E:/java.txt");
fos = new FileOutputStream("e:/java5.txt");
bos = new BufferedOutputStream( fos );
bis = new BufferedInputStream( fis );
for ( int i = 0; i<100 && (c = bis.read()) != -1; i++) {
//System.out.print((char)c + " ");
bos.write((char)c);
}
//fis.close();
//fos.close();
bis.close();
bos.close();
}catch (FileNotFoundException e2) {
e2.printStackTrace();
}
catch (IOException e1) {
e1.printStackTrace();
}
File file = new File("E:/java5.txt");
System.out.println(file.length());
}
}
參考:http://www.cnblogs.com/byrhuangqiang/p/3924985.html
綜上:使用處理流最簡單的關閉方式是:
直接關閉處理流,而不用管與之相關聯(lián)的節(jié)點流。
因為再關閉處理流時會調用節(jié)點流的關閉函數(shù)。
InputStreamReader 把字節(jié)流轉換為字符流。
OutputStreamWriter 把字節(jié)流轉換為字符流。
這樣子可以直接寫字符串進入文件。也可以直接讀字符串。
將標準輸入流套接到轉換字符輸入流中,再將轉換字符流套接到緩沖流中。
import java.io.*;
public class TestTranFormReader {
public static void main(String[] args) {
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader bfr =new BufferedReader(in);
String s = null;
try{
s = bfr.readLine();
while (s != null) {
System.out.println(s);
s = bfr.readLine();
if (s.equalsIgnoreCase("exit")) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}