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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© taotao 中级黑马   /  2013-8-7 09:30  /  1577 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 taotao 于 2013-8-8 18:01 编辑

用FileReader、FileWriter  结合  字符数组方式传输字符(图一)与用BufferReader、BufferWriter方式(图二)相比,效率有什么不同?如果相同的话,为什么还要多此一举呢。

                             (图一)

                               (图二)

还有,在图一中,为什么老师不在while里面用  fw.Flush()  呢?每次都取1024个字节,如果没有及时的Flush到目的文件中,多不好。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

7 个回复

倒序浏览
FileReader和FileWriter 需要自己定义缓冲数组,而BufferedReader和BufferedWriter是封装好带缓冲区的流对象,你可以在程序前后加上系统时间,来测试哪个更快。
在哪里用flush()方法,我觉得差别不大。
回复 使用道具 举报
你好,BufferedReader和BufferedWriter是装饰类,它们可以接受字符流,这些装饰类中提供了更简便的方法,比如readLine()等
而且BufferedReader封装了数组,不需要自定义缓冲区,也不需要考虑缓冲区大小,使用更方便
回复 使用道具 举报
第二种是利用的缓冲区技术,解决的是"瓶颈"的问题,可以提高效率。
例如;当有10000字节要处理,当你的读取和写入的速度不一样的时候,
如果用第一种的话,那就是一边读一边写,这样必须都得开着,因为速度不一样,其中一方肯定会听着,浪费内存,浪得时间,
如果用第二种的话,先把读或者写放到缓冲区中,等到满了,然后一次写或者读,这样就可以一直读或者一直写,不用等着,这样既可以节省内存,有可以节省时间。

同样的工作量,第一种用的时间多,第二种利用缓冲区,利用时间少,效率自然高了。

    希望对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
forward 发表于 2013-8-7 14:55
第二种是利用的缓冲区技术,解决的是"瓶颈"的问题,可以提高效率。
例如;当有10000字节要处理,当你的读取 ...

谢谢,可是第一种定义了字符数组,不是也相当于缓冲区了吗?
回复 使用道具 举报
哪颗最亮的星星 发表于 2013-8-7 09:59
FileReader和FileWriter 需要自己定义缓冲数组,而BufferedReader和BufferedWriter是封装好带缓冲区的流对 ...

O(∩_∩)O~,不在while里用flush()的话,根据老师所讲,数据是不会存储到目的文件中的,那数据存到内存的什么地方了?也就是说在fw.write()之后,fw.flush()之前的数据在哪?
回复 使用道具 举报
taotao 发表于 2013-8-7 15:52
O(∩_∩)O~,不在while里用flush()的话,根据老师所讲,数据是不会存储到目的文件中的,那数据存到内存 ...

内存中,
回复 使用道具 举报

:L:L:L:L:L:L:L:L:L:L
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马