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();}
}
}