java-字符缓冲流(提高读写效率)

1.1字符缓冲流【应用】

  • 字符缓冲流介绍

    • BufferedWriter:将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途

    • BufferedReader:从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途

    • 缓冲流在底层创建了一个大小为8192的数组,这也是为什么缓冲流能快的关键!

    • 在这里插入图片描述

  • 构造方法

    方法名说明
    BufferedWriter(Writer out)创建字符缓冲输出流对象
    BufferedReader(Reader in)创建字符缓冲输入流对象
  • 代码演示
    输出流:

    public class BufferedStreamDemo01 {
        public static void main(String[] args) throws IOException {
          //字符缓冲输入流
          BufferedReader br = new BufferedReader(new FileReader("charstream\\a.txt"));
    
          //读取数据
          char [] chars = new char[1024];
          int len;
          while((len = br.read(chars)) != -1){
              System.out.println(new String(chars,0,len));
          }
    
          br.close();
      }
        }
    }
    

    输入流:

    public class BufferedStreamDemo01 {
        public static void main(String[] args) throws IOException {
                  //字符缓冲输出流
          BufferedWriter bw = new BufferedWriter(new FileWriter("charstream\\a.txt"));
    
          //写出数据
          //实际写出的是97对应的字符a
          bw.write(97);
          bw.write("\r\n");
    
          //实际写出的是97 - 101 对应的字符 abcde
          char [] chars = {97,98,99,100,101};
          bw.write(chars);
          bw.write("\r\n");
    
          //实际写的是abc
          bw.write(chars,0,3);
          bw.write("\r\n");
    
          //会把字符串的内容原样写出
          bw.write("黑马程序员");
          bw.write("\r\n");
    
          //会把字符串的一部分写出 abcde
          String line = "abcdefg";
          bw.write(line,0,5);
    
          bw.flush();
    
          bw.close();
          }
    }
    

1.2字符缓冲流特有功能【应用】

  • 方法介绍

    BufferedWriter:

    方法名说明
    void newLine()写一行行分隔符,行分隔符字符串由系统属性定义

    BufferedReader:

    方法名说明
    String readLine()读一行文字。 结果包含行的内容的字符串,不包括换行以及任何行终止字符;如果流的结尾已经到达,则为null
  • 代码演示

    public class BufferedStreamDemo02 {
        public static void main(String[] args) throws IOException {
    
            //创建字符缓冲输出流
            BufferedWriter bw = new BufferedWriter(new                                                          FileWriter("myCharStream\\bw.txt"));
    
            //写数据
            for (int i = 0; i < 10; i++) {
                bw.write("hello" + i);
                //bw.write("\r\n");
                bw.newLine();
                bw.flush();
            }
    
            //释放资源
            bw.close();
    
            //创建字符缓冲输入流
            BufferedReader br = new BufferedReader(new                                                          FileReader("myCharStream\\bw.txt"));
    
            String line;
        //可以读取一整行数据。一直读,读到回车换行为止。
        //但是他不会读取回车换行符。
            while ((line=br.readLine())!=null) {
                System.out.println(line);
            }
    
            br.close();
        }
    }
    

1.3字符缓冲流操作文件中数据排序案例【应用】

  • 案例需求

    使用字符缓冲流读取文件中的数据,排序后再次写到本地文件

  • 实现步骤

    • 将文件中的数据读取到程序中
    • 对读取到的数据进行处理
    • 将处理后的数据添加到集合中
    • 对集合中的数据进行排序
    • 将排序后的集合中的数据写入到文件中
  • 注意事项

    • 不能同时创建输入流和输出流,因为创建输出流时文件已存在会清空文件!导致读取空文件
  • 代码实现

    public class CharStreamDemo14 {
        public static void main(String[] args) throws IOException {
            //需求:读取文件中的数据,排序后再次写到本地文件
            //分析:
            //1.要把文件中的数据读取进来。
            BufferedReader br = new BufferedReader(new FileReader("charstream\\sort.txt"));
            //输出流一定不能写在这里,因为会清空文件中的内容
            //BufferedWriter bw = new BufferedWriter(new FileWriter("charstream\\sort.txt"));
    
            String line = br.readLine();
            System.out.println("读取到的数据为" + line);
            br.close();
    
            //2.按照空格进行切割
            String[] split = line.split(" ");//9 1 2 5 3 10 4 6 7 8
            //3.把字符串类型的数组变成int类型
            int [] arr = new int[split.length];
            //遍历split数组,可以进行类型转换。
            for (int i = 0; i < split.length; i++) {
                String smallStr = split[i];
                //类型转换
                int number = Integer.parseInt(smallStr);
                //把转换后的结果存入到arr中
                arr[i] = number;
            }
            //4.排序
            Arrays.sort(arr);
            System.out.println(Arrays.toString(arr));
    
            //5.把排序之后结果写回到本地 1 2 3 4...
            BufferedWriter bw = new BufferedWriter(new FileWriter("charstream\\sort.txt"));
            //写出
            for (int i = 0; i < arr.length; i++) {
                bw.write(arr[i] + " ");
                bw.flush();
            }
            //释放资源
            bw.close();
    
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值