浅谈缓冲字符流 BufferedReader BufferedWriter用法

 更新时间:2021年07月21日 11:52:50   作者:巧克力曲奇  
这篇文章主要介绍了缓冲字符流 BufferedReader BufferedWriter的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

缓冲字符流BufferedReader和BufferedWriter

问题:

之前的文件读写都是按照字节、字符或者数组来实现的,对于文本文件而言,能否按照行,一行行读写呢。

提供了BufferedReader和BufferedWriter实现按行读写

package com.bjsxt.ios3;
import java.io.*;
public class TestBufferedReaderWriter {
    public static void main(String[] args) throws IOException {
        //1.创建流
        BufferedReader br =
                new BufferedReader(new FileReader("c:/RecorderSDKLog.txt"));
        BufferedWriter bw =
                new BufferedWriter(new FileWriter("c:/RecorderSDKLog2.txt"));

        //2.使用流
        String str = br.readLine();
        while(str != null){
            //输出当前行数据
            System.out.println(str);
            //写当前行数据到文件
            bw.write(str);
            //bw.write("\n");
            bw.newLine();
            //再读一行
            str = br.readLine();
        }
        //3.关闭流
        br.close();
        bw.close();
    }
}

总结1:BufferedReader和BufferedWriter的优点

1.速度快

2.简化编程

总结2:readLine()底层的原理

底层还是一个一个字符的读取,append()放入到StringBuilder(或者char[] )中,遇到换行符 ,将StringBuilder(char[])转换成String并返回

总结3:不同的操作系统中换行符是不同的

Unix系统里,每行结尾只有“<换行>”,即“\n”;

Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;

Mac系统里,每行结尾是“<回车>”,即“\r”。

BufferedReader和BufferedWriter 性能较好的原因

原理:

BufferedReader会一次性从物理流中读取8k(默认数值,可以设置)字节内容到内存,如果外界有请求,就会到这里存取,如果内存里没有才到物理流里再去读。即使读,也是再8k。

而直接读物理流,是按字节来读。

对物理流的每次读取,都有IO操作。IO操作是最耗费时间的。

BufferedReader就是减少了大量IO操作,而为你节省了时间。

简单的说,一次IO操作,读取一个字节也是读取,读取8k个字节也是读取,两者花费时间相差不多。而一次IO的来回操作却要耗费大量时间。

好比是一辆大型汽车(设装100人),要去车站接人到公司,接一个人也是接,接100个人也是接,而时间一样。显然,接100个人最划算。

物理流就是一次一个字节(一个人)

Buffered就是一次8k个字节(100个人)

对于读取定长字节文件,当然BufferedReader更快了!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java动态规划算法——硬币找零问题实例分析

    java动态规划算法——硬币找零问题实例分析

    这篇文章主要介绍了java动态规划算法——硬币找零问题,结合实例形式分析了java动态规划算法——硬币找零问题相关原理、实现方法与操作注意事项,需要的朋友可以参考下
    2020-05-05
  • Java通过word模板实现创建word文档报告

    Java通过word模板实现创建word文档报告

    这篇文章主要为大家详细介绍了Java如何通过word模板实现创建word文档报告的教程,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2022-09-09
  • 基于Java实现收发电子邮件功能

    基于Java实现收发电子邮件功能

    Email就是电子邮件,我们平常使用的QQ邮箱,网易邮箱,Foxmail都是用来收发邮件的,利用Java程序也可以完成收发电子邮件的功能,本文就来为大家详细讲讲实现步骤
    2022-07-07
  • JAVA如何定义构造函数过程解析

    JAVA如何定义构造函数过程解析

    这篇文章主要介绍了JAVA如何定义构造函数过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • JVM钩子函数的使用场景详解

    JVM钩子函数的使用场景详解

    当jvm进程退出的时候,或者受到了系统的中断信号,hook线程就会启动,一个线程可以注入多个钩,下面这篇文章主要给大家介绍了关于JVM钩子函数使用的相关资料,需要的朋友可以参考下
    2021-08-08
  • Java使用POI导出Excel(一):单sheet

    Java使用POI导出Excel(一):单sheet

    这篇文章介绍了Java使用POI导出Excel的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • SpringCloud超详细讲解Feign声明式服务调用

    SpringCloud超详细讲解Feign声明式服务调用

    Feign可以把Rest的请求进行隐藏,伪装成类似Spring MVC的Controller一样。不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做
    2022-06-06
  • Java抽奖抢购算法

    Java抽奖抢购算法

    这篇文章主要为大家详细介绍了Java抽奖抢购算法,ava实现的抽奖抢购算法,用数据库行锁实现,支持集群,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Spring Boot 多个定时器冲突问题的解决方法

    Spring Boot 多个定时器冲突问题的解决方法

    这篇文章主要介绍了Spring Boot 多个定时器冲突问题的解决方法,实际开发中定时器需要解决多个定时器同时并发的问题,也要解决定时器之间的冲突问题,本文通过问题场景重现给大家介绍的非常详细,需要的朋友参考下吧
    2022-05-05
  • java结束进程的实例代码

    java结束进程的实例代码

    java结束程序进程的方法很简单,只要一句代码就行,大家参考使用吧
    2013-12-12

最新评论