zoukankan      html  css  js  c++  java
  • Java IO(十八) BufferedReader 和 BufferedWriter

     Java IO(十八) BufferedReader 和 BufferedWriter

    一、介绍

    BufferedReader 和 BufferedWriter 是字符缓冲流,分别继承自 Reader 和 Writer,它们与字节缓冲流 BufferedInputStream 和 BufferedOutputStream 类似,都是为其他基础流添加缓冲功能。

    • BufferedReader:字符缓冲输入流,它继承于Reader,为其他字符输入流添加一些缓冲功能,以提供单个字符,数组和字符串的高效写入。
    • BufferedWriter:字符缓冲输出流,它继承于Writer,为其他祖父输出流添加一些缓冲功能。以提供字符,数组和行的高效读取。

    二、构造方法

    (一)、BufferedReader

    (二)、BufferedWriter

    三、常用API

    (一)、BufferedReader

    (二)、BufferedWriter

    四、缓冲功能

    (一)、BufferedWriter

    BufferedWriter为其它输出流提供缓冲功能。创建 BufferedWriter 时,我们会通过它的构造函数指定某个输出流为参数。通过字符数组来缓冲数据,当缓冲区满或者用户调用 flush() 函数时,它就会将缓冲区的数据写入到输出流中。

    (二)、BufferedReader

    BufferedReader 的作用是为其它输入流提供缓冲功能。创建 BufferedReader 时,我们会通过它的构造函数指定某个输入流为参数。BufferedReader 会将该输入流数据分批读取,每次读取一部分到缓冲中;操作完缓冲中的这部分数据之后,再从输入流中读取下一部分的数据。缓冲中的数据实际上是保存在内存中,从内存中读取数据的速度更快从而提高性能。

    分批读取而不一次性读取的好处:

    • 缩短读取时间,提高读取性能。
    • 减少内存空间占用。

    五、实例

    private static char[] chs = new char[] 
        {'a','b','c','d','e','f','g','h','i','j','k','l','m',
           'n','o','p','q','r','s','t','u','v','w','x','y','z'};
    public static void main(String[] args) {
      write();
      read();
    }
        
    /**
     * BufferedWriter 测试
     */
    public static void write() {
      BufferedWriter bw = null;
      try {
        bw = new BufferedWriter(new FileWriter("buff.txt"));
        bw.write(chs);// 写入字符数组
        bw.write("
    ");
        String str = String.valueOf(chs);// 将字符数组转成String
        bw.write(str.toUpperCase());// 将小写字母变成大写字母
      } catch (IOException e) {
        e.printStackTrace();
      }finally {
        try {
          if (bw != null)
            bw.close();
        }catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
    /** * BufferedReader 测试 */ public static void read() {   BufferedReader br = null;   char[] ch = new char[10];   try {     br = new BufferedReader(new FileReader("buff.txt"));     System.out.println("read : " + (char)br.read());// 读取一个字符,将int转成char     int len = br.read(ch);     System.out.println("ch : " + new String(ch));// 将读取字符数组转成String     if (!br.markSupported()) {// 若该字符流不支持标记功能,则直接退出       System.out.println("Stream not marked");       return;     }     br.mark(1024);// 标记当前位置     br.skip(24);// 跳过24个字符     System.out.println("line : " + br.readLine());// 读取该行剩余数据     br.reset();// 重置输入流到mark标记的位置     len = br.read(ch, 0, 5); // 从0位置开始读取,读取长度为5     System.out.println("read(ch, 0, 5) : " + new String(ch,0,len));     System.out.println("line : " + br.readLine());   }catch(Exception e) {     e.printStackTrace();   }finally {     try {       if (br != null)         br.close();     }catch(IOException e) {       e.printStackTrace();     }   } }
  • 相关阅读:
    SQL语句之奇形怪状的冷门函数
    计算累计收益
    关于SQL表字段值缺失的处理办法
    虚拟机移植到另一台机器
    分分钟搞懂rank() over(partition by)的使用
    分分钟搞懂union与union all
    【转】10分钟就能学会的.NET Core配置
    【转】依赖注入的威力,.NET Core的魅力:解决MVC视图中的中文被html编码的问题
    【转】Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法
    【转】在.net Core 中像以前那样的使用HttpContext.Current
  • 原文地址:https://www.cnblogs.com/lingq/p/12929845.html
Copyright © 2011-2022 走看看