欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

BufferedReader和FileReader的区别

发布时间:2024/9/19 编程问答 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 BufferedReader和FileReader的区别 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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的区别的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。