再上一节我们概括了IO这个章中的类
其中按功能我们了 节点流和处理流。
本节我们介绍处理流,在上节我们也给出了处理的流的定义,在这不在详细说明 处理流中的缓冲流
缓冲流是在一个流上又套接一个流用来提高效率的,我们知道节点流是一个个的读取文件而缓冲流是把读取的文件一次性写入或者写出的。
这样的好处是更好的保护硬盘,提高读写效率。
缓冲流包括(具体的类和方法可查看API中IO这个包
BufferedInputStream
作为另一种输入流,BufferedInputStream 为添加了功能,即缓冲输入和支持 mark 和 reset 方法的能力。创建 BufferedInputStream 时即创建了一个内部缓冲区数组。读取或跳过流中的各字节时,必要时可根据所包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset 操作导致在从所包含的输入流中获取新的字节前,再次读取自最后一次 mark 操作以来所读取的所有字节。
BufferedOutputStream
该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入基础输出流中,而不必为每次字节写入调用基础系统。
BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
BufferedReader in
= new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
BufferedWriter
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 ('/n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。
通常 Writer 将其输出立即发送到基础字符或字节流。除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)。例如,
PrintWriter out
= new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
下面我们举例说明:
- import java.io.*;
- public class BufferedReader1 {
- public static void main(String[] args) {
- String c=null;
- try {
- FileReader fr = new FileReader ("某文件的路径");
- BufferedReader br = new BufferedReader (fr);
- while((c=br.readLine())!=null){ //readLine方法读取一个文本行。
- System.out.print(c);
- }
- br.close();
- } catch (FileNotFoundException e) {
- System.out.println("文件没有被发现");
- e.printStackTrace();
- } catch (IOException e) {
- // TODO 自动生成 catch 块
- e.printStackTrace();
- }
- }
- }
- //我们可以看到用BufferedReader 这个类时会有个readLine这个方法,这个方法好处是一次读取一行,相对效率更高。