A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李然 中级黑马   /  2013-12-26 10:42  /  978 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问各位高手,filereader类中的read方法,bufferreader类中的readline方法,都说后者比前者效率高,但是readline虽然会先把数据读出来放在缓冲区的数组中,但不也是一个一个读的吗?效率到底差在哪啊?难道就差在readline遇到换行符不往数组里放?仔细想想,readline先把数据放在缓冲区中,在写入流中,再刷新流放入目的地,好像比read方法多一个步奏啊,效率比read方法慢才对啊,请各位高手指导一下。。。。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 25分,是一个圆满。25分只是开始,不是结束.

查看全部评分

6 个回复

倒序浏览
FFF 金牌黑马 2013-12-26 13:35:09
沙发
本帖最后由 FFF 于 2013-12-26 13:37 编辑

比如搬砖。
你是一次搬一个砖上十楼去快,还是一次搬一车砖上十楼去快?
搬一车砖的时候,同样是多了一个把砖放到车里的动力。、但你觉得是一次搬一车,还是一次搬一个砖快呢?
你搬砖的时候,同样是要把砖拿起。把砖放下。

缓冲流没有学好啊、同学还要多多努力,
回复 使用道具 举报
楼上 也说 了 bufferReader 起到了一个缓冲的作用
回复 使用道具 举报
  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.FileReader;
  4. import java.io.FileWriter;
  5. import java.io.IOException;

  6. class  BufferedReaderDemo
  7. {
  8.         public static void main(String[] args) throws IOException
  9.         {
  10.                 FileReader fr = new FileReader("BufferedReaderDemo.java");
  11.                 FileReader fr1 = new FileReader("BufferedReaderDemo.java");
  12.                 BufferedReader bufr = new BufferedReader(fr);
  13.                 FileWriter fw = new FileWriter("buf.txt");
  14.                 FileWriter fw1 = new FileWriter("buf1.txt");
  15.                 BufferedWriter bufw = new BufferedWriter(fw);
  16.                 int i=-1;
  17.                 String line = null;
  18.                 long stact = System.currentTimeMillis();
  19.                 while((i=fr1.read())!=-1)//用read:它读一个写一个,读取流和写入流来回的进出内存比较耗时
  20.                 {
  21.                         fw1.write(i);
  22.                         fw1.flush();
  23.                 }
  24.                 System.out.println(System.currentTimeMillis() - stact);
  25.                 stact = System.currentTimeMillis();
  26.                 while((line=bufr.readLine())!=null)//用readLine:读一堆写一堆,读取流读够了,写入流在写,读取流和写入流交换不频繁。
  27.                 {
  28.                         bufw.write(line);
  29.                         bufw.newLine();
  30.                         bufw.flush();
  31.                 }
  32.                 System.out.println(System.currentTimeMillis() - stact);
  33.         fw1.close();
  34.                 bufr.close();
  35.                 bufw.close();
复制代码

评分

参与人数 1黑马币 +9 收起 理由
FFF + 9 个人解释与总结太少。

查看全部评分

回复 使用道具 举报
FFF 发表于 2013-12-26 13:35
比如搬砖。
你是一次搬一个砖上十楼去快,还是一次搬一车砖上十楼去快?
搬一车砖的时候,同样是多了一个把 ...

恩,多谢。
回复 使用道具 举报
读取的速度应该没差多少,使用bufferreader,主要是因为它的缓冲区,优化了数据保存到硬盘的时间。
read方法是读一个,存一个,具体是读一个字符到内存,然后将这个字符存到硬盘。因为硬盘在不停的转,存一次,硬盘就需要定位一次(就是寻道)。
bufferreader是读一定数量,然后将这些数据一次存到硬盘,这样硬盘只需要寻道一次。这样一来,时间就被节省下来了。
回复 使用道具 举报
readLine()方法,表示每次读取数据先存入缓冲区读完一行后再写入流中,而read()方法读一个数据写一个数据所以效率较低
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马