FileInputStream有一個致命的缺陷,那就是每讀取一個字節就訪問硬盤一次,這樣對硬盤傷害很大,因此提出了緩衝區的輸入輸出流,將硬盤裏的數據緩衝到緩衝區內,這樣就避免在讀寫玩緩衝區內的數據之前訪問硬盤,卡賓下面一個小例子:
import java.io.*;
public class TestBufferStream1 {
public static void main(String[] args) {
try{
BufferedInputStream brs = new BufferedInputStream(new FileInputStream ("d:/java/HelloWorld.java"));
System.out.println(brs.read()); //讀取一個字符
int c=0;
brs.mark(10); //標記,不執行任何操作,看JDK文檔
for(int i=0;i<10&&((c=brs.read())!=-1);i++){
System.out.print(c + " ");
}
brs.reset(); //還原到標記的地方繼續讀
System.out.println();
for(int i=0;i<10&&((c=brs.read())!=-1);i++){
System.out.print((char)c + " "); //將C轉成字符形式讀入
}
brs.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
import java.io.*;
public class TestBufferStream2 {
public static void main(String[] args) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\share\\java\\dat2.txt"));
BufferedReader br = new BufferedReader(
new FileReader("d:\\share\\java\\dat2.txt"));
String s = null;
for(int i=1;i<=100;i++){
s = String.valueOf(Math.random());
bw.write(s);
bw.newLine();
}
bw.flush();<span style="white-space:pre"> </span>//刷新該流緩衝,在關閉之前都要刷新,
while((s=br.readLine())!=null){<span style="white-space:pre"> </span>//這裏需要注意,BufferedWriter不在是讀取一個字節,而是讀取一個字符,因此s爲字符
System.out.println(s);
}
bw.close();
br.close();
} catch (IOException e) { e.printStackTrace();}
}
}