按照行读更快(通向缓冲区, 普通的字符输出流是通向文件)
    image.png
    image.png
    字符缓冲输出流:
    image.png
    想要追加,还是得用原始管道:
    image.png
    newLine (字符缓冲流的API)
    image.png

    1. package com.itheima.d3_char_buffer;
    2. import java.io.BufferedReader;
    3. import java.io.FileReader;
    4. import java.io.IOException;
    5. import java.io.Reader;
    6. /**
    7. * 目标: 学会使用缓冲字符输入流提高字符输入流的性能,新增了按照行读取的方法(经典代码)
    8. * 经典代码含义:有更多人用这种代码的风格来写
    9. *
    10. */
    11. public class BufferedReaderDemo1 {
    12. public static void main(String[] args) {
    13. try (
    14. // 资源要释放,放到小括号里面
    15. // 1. 创建一个文件字符输入流与源文件接通
    16. Reader fr = new FileReader("io-app2\\src\\data.txt");
    17. // a. 把低级的字符输入流包装成高级的缓冲字符输入流 (输入流读写)-- 将本地文件读到内存
    18. // 由于要用BufferedReader的独有方法,就不用多态写
    19. BufferedReader br = new BufferedReader(fr);
    20. ){
    21. // // 2. 用循环,每次读取一个字符数组的数据
    22. // char[] buffer = new char[1024]; // 这个字符数组存储1024个字符 元素
    23. // int len; // 记录每次读取了多少个元素 (最后一桶可能装不满,读多少倒多少)
    24. // while ((len = br.read(buffer)) != -1){ // 不等于-1 代表读到了元素
    25. // String rs = new String(buffer,0,len); // 做一个解码 读多少倒多少
    26. // System.out.print(rs);
    27. // }
    28. // // 读文件一行数据
    29. // System.out.println(br.readLine()); // 有空行一样读
    30. // // (空行一旦下面没有内容了,就返回null,如果还有内容则把空行读出来)很智能
    31. // // 相当于读到null就结束
    32. // System.out.println(br.readLine()); // 接着往下读一行
    33. // System.out.println(br.readLine());
    34. // System.out.println(br.readLine());
    35. // 改进用循环
    36. String line; // 定义一个变量表示是否读到内容
    37. while ((line = br.readLine()) != null){ // 如果没读到就为空,不为空则表示读到立刻
    38. System.out.println(line); // 输出该读到的内容
    39. }
    40. } catch (Exception e) {
    41. e.printStackTrace();
    42. }
    43. }
    44. }