缓冲流专属


文章目录

  • 缓冲流专属
  • BufferedReader流
  • 代码示例
  • 代码示例【字节流转字符流】
  • BufferedWriter流
  • 代码示例


在进行读取文件数据的操作时,读取数据量大的文件时,读取的速度会很慢,Java中提供了一套缓冲流,可以提高IO流的读写速度

BufferedReader流

代码示例

public class BufferedReaderTest {
    public static void main(String[] args) {

        /*
        当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流
        外部负责包装的这个流,叫做:包装流,还有一个名字叫做:处理流
        像当前这个程序来说:FileReader就是一个节点流 ;BufferedReader就是包装流、处理流
         */

        FileReader reader = null;
        BufferedReader buffer = null ;
        try {
            reader = new FileReader("E:/Typora笔记/JavaSE/IO流/语录2.0.txt");

            buffer = new BufferedReader(reader);

            //读一行
//        String lines1 = buffer.readLine();
//        System.out.println(lines1);

            //读一个文本
            //buffer.readLine() 方法读一个文本行,但不带换行符
            String s  = null ;
            while ((s = buffer.readLine()) != null) {
                System.out.print(s);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if (buffer==null) {
                try {
                    //关闭流
                    //对于包装流来说,只需要关闭最外层流就行,里面的节点流会自动关闭(可以查看源代码)
                    buffer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}
  • 当一个流的构造方法中需要一个流的时候,这个被传进来的流叫做:节点流
  • 外部负责包装的这个流,叫做:包装流,还有一个名字叫做:处理流
  • 像当前这个程序来说:FileReader就是一个节点流 ;BufferedReader就是包装流、处理流
  • 对于包装流来说,只需要关闭最外层流就行,里面的节点流会自动关闭(可以查看源代码)

代码示例【字节流转字符流】

public class BufferedReaderTest02 {
    public static void main(String[] args) {
        FileInputStream fileInputStream = null ;
        BufferedReader buffer = null ;

        //字节流
        try {
            fileInputStream = new FileInputStream("E:/Typora笔记/JavaSE/IO流/语录2.0.txt");

            //通过转换流转换【InputStreamReader:将字节流转换成字符流】
            //fileInputStream:节点流   reader:包装流
            InputStreamReader reader = new InputStreamReader(fileInputStream);

            //这个构造方法只能传一个字符流,不能传字节流
            //reader:节点流    buffer:包装流
            buffer = new BufferedReader(reader);
            
             BufferedReader buffer1 = new BufferedReader(new InputStreamReader(new FileInputStream("E:/Typora笔记/JavaSE/IO流/语录2.0.txt")));

            String line = null ;
            while ((line = buffer.readLine()) != null) {
                System.out.println(line);
            }
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                //关闭最外层
                buffer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

补充【合并字节流、转换流、字符流】:

public class BufferedReaderTest02 {
    public static void main(String[] args) {
    
        BufferedReader buffer1 = null ;

        try {

            buffer1 = new BufferedReader(new InputStreamReader(new FileInputStream("E:/Typora笔记/JavaSE/IO流/语录2.0.txt")));

            String line = null ;
            while ((line = buffer1.readLine()) != null) {
                System.out.println(line);
            }
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                //关闭最外层
                buffer1.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

运行结果:

我行过许多地方的桥,看过许多次数的云,
喝过许多种类的酒,却只爱过一个正当最好年龄的人

BufferedWriter流

代码示例

  • BufferedWriter : 带有缓冲的字符输出流
  • OutputStreamWriter :转换流
public class BufferedWriterTest01 {
    public static void main(String[] args) {
        BufferedWriter writer = null ;

        try {
            //带有缓冲区的字符输出流
            writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:/Typora笔记/JavaSE/IO流/语录2.0.txt",true)));

            writer.write("\n");
            writer.write("------沈从文");
            writer.write("《湘行散记》");

            writer.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (writer!=null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}