BufferedReader和FileReader的区别

​ BufferedReader和BufferedWriter在内存中会自带一个8kb的字节缓冲区,并且他提供了一个程序员比较喜欢用的方法readLine();方法。

BufferedReader构造函数

从构造函数中能看到,BufferedReader实际上就是通过在内存中new一个数组来当缓冲区

   public BufferedReader(Reader in, int sz) {super(in);if (sz <= 0)throw new IllegalArgumentException("Buffer size <= 0");this.in = in;cb = new char[sz];nextChar = nChars = 0;}

从效率上讲,如果你从内存中自定义一个8kb的Byte[]数值来当缓冲区,调用FileWriter和FileWriter来进行读写,效率上是差不多的。

//通过BufferedReader来进行读取
BufferedReader br= null;
int len = -1;
char[] c=new char[4098]; //8kb
long start = System.currentTimeMillis();
try{br = new BufferedReader(new FileReader("D:\\test.txt"));while(len=br.read(c) !=-1 ){//System.out.print(new String(c,0,len));    //看情况输出}}catch(Exception e){e.printStackTrace();
}finally{if(br != null)try{br.close();}catch(Exception e){e.printStackTrace();}
}
long end = System.currentTimeMillis();
System.out.println("\ntime:"+(end - start));//通过FileReader读入数据
FileReader fr=null;
int len = -1;
char[] c=new char[4098]; //8kb
long start = System.currentTimeMillis();
try{fr = new FileReader("D:\\test.txt");while(len=fr.read(c) !=-1 ){//System.out.print(new String(c,0,len));    //看情况输出}}catch(Exception e){e.printStackTrace();
}finally{if(fr != null)try{fr.close();}catch(Exception e){e.printStackTrace();}
}
long end = System.currentTimeMillis();
System.out.println("\ntime2:"+(end - start));

为了对比效率,我对一个1GB的txt文件和一个3MB左右的txt文件进行读取,并对其时间结果进行比较

//-----------------1GB*-----------------
//第一次
time:1733time2:1644//第二次
time:1827time2:1767//第三次
time:1723time2:1642//---------------3MB*--------------------
//第一次
time:23time2:12//第二次
time:28time2:11//第三次
time:26time2:15

​ 从结果上看基本效率是差不多的,其实BufferedReader在内存创建了一个8kb的缓冲区,每次使用read的时候都是从BufferedReader的缓冲区中读入8kb到我们准备好的字符缓存区c中,所以效率上讲和我们自己用FileReader其实两者并没有什么太大的区别,唯一区别是BufferReader自带了一个缓存区,并且拥有readLine函数,方便我们对字符的读取。

​ 因为BufferReader自带了一个缓冲区,所以上面的读取上回出现FileReader的快一点的现象。

​ 如果喜欢尝试的话,也可以把缓冲区的大小进行调整,看看运行速度的变化。

还有一个值得注意的概念是cache和Buffer是有不同的,别把缓存区和缓冲区两者傻傻分不清。

BufferedReader和FileReader的区别相关推荐

  1. InputStream Reader FileInputStream BufferedReader InputStreamReader FileReader FileInputStream和转换流

    原文地址,转发备忘 https://blog.csdn.net/liu940204/article/details/79994467 ava.io下面有两个抽象类:InputStream和Reader ...

  2. InputStream和Reader,FileInputStream和 FileReader的区别

    一.InputStream和Reader的区别 InputStream和Reader都可以用来读数据(从文件中读取数据或从Socket中读取数据),最主要的区别如下: InputStream用来读取二 ...

  3. bufferreader java_Java - BufferedReader对比FileReader到底哪里进行了优化

    近日学习IO知识的时候对于BufferedReader和FileReader的差别不是很理解,如果说BufferedReader是对于FileReader添加了一个缓冲区,那么FileReader不是 ...

  4. InputStreamReader、BufferedReader输出内容的区别

    很早之前写过一个小项目,是关于某个音游自制谱面文件内语法内容错误检查的.昨天回看项目时,发现自己在读取文件时使用了 BufferedReader 而注释掉了 InputStreamReader 所以想 ...

  5. Java学习之FileInputStream与FileReader的区别

    我们对于文件中数据的操作无非就有两种:读出与写入 对于Java来说,对数据的操作有字节流(FileOutputStream.FileInputStream)与字符流(FileWriter.FileRe ...

  6. FileReader FileInputStream InputStreamReader BufferedReader 作用与区别

    FileReader FileInputStream InputStreamReader BufferedReader 作用与区别 ava.io下面有两个抽象类:InputStream和Reader ...

  7. 02_IO操作的基本规律(InputStream,OutputStream,Reader,Writer,FileReader,FileWriter,BufferedReader,BufferedWri

     模拟BufferedInputStream,编写一个类 package toto.IO; import java.io.IOException; import java.io.InputStre ...

  8. JAVA读文件类之FileReader/InputStreamReader/BufferedReader

    上一篇写了Java写入文件操作,这一篇回顾一下Java读文件操作. Java IO采用reader类来进行文件读取,而且已经提供了三个Reader的实现类,FileReader,InputStream ...

  9. 和catch的区别_BIO、NIO、AIO 的区别是什么?

    BIO.NIO.AIO 的区别是什么? 同/异步.阻/非阻塞的区别是什么? 文件读写最优雅的实现方式是什么? NIO 如何实现多路复用功能? 带着以上这几个问题,跟着芒果一起进入IO的世界吧. 在开始 ...

最新文章

  1. 【Qt】通过QtCreator源码学习Qt(六):命令行参数解析实现
  2. android sqlitelog,android-Room-SQLiteLog:(1)SQL变量过多
  3. [转]24岁到26岁 奔三的尴尬年纪,你要知道的50件事
  4. 分享:SringBuffer与String的区别
  5. 3D 投影矩阵学习1
  6. 2019年那些匆忙入市的朋友现在都赚到钱了吗?
  7. JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载](一)
  8. HTML5托拽上传(XMLHttpRequest和Google Gears)
  9. 【mysql】关于IO/内存方面的一些优化
  10. 七月刚入职字节跳动的测试开发面试题,附答案
  11. Win10用Windows照片查看程序(照片查看器)打开图片
  12. VRay Next for SketchUp 赋予材质常见问题
  13. $route.matched的作用以及面包屑导航的制作
  14. bag of tricks for image classification with convolutional neural networks
  15. 【EXCEL】解决因为删除、移动、隐藏行后序号不连续的问题
  16. vue打包app网络错误和空白页问题
  17. 怎样让小孩变成机灵顾客
  18. 大一学生HTML期末作业 【html体育排球5页面带注册】学生网页设计作业源码
  19. (已完善)基于Python的TCP 协议实现人机聊天(程序具有服务端和客户端)
  20. Java毕业设计-电影售票管理系统

热门文章

  1. Windows下编译axel 2.6 / 2.11(下载神器)
  2. innoDB 存储引擎
  3. 【笔记】分离字符串中的数字、字母和汉字
  4. bash脚本编程之一 条件判断及算术运算
  5. bzoj1257 数学整理二分查询
  6. ThinkPHP笔记——完全配置参考手册
  7. 加窗Fourier变换算法的C++实现
  8. [公告] TechNet / MSDN 经理人博客上周移机整合暂断
  9. web developer tips (37):如何组织Using指令
  10. 四道微软面试经典算法题