黑马程序员技术交流社区

标题: IO问题 [打印本页]

作者: taotao    时间: 2013-8-7 09:30
标题: IO问题
本帖最后由 taotao 于 2013-8-8 18:01 编辑

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

                             (图一)

                               (图二)

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

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

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

    希望对你有帮助!

作者: taotao    时间: 2013-8-7 15:45
forward 发表于 2013-8-7 14:55
第二种是利用的缓冲区技术,解决的是"瓶颈"的问题,可以提高效率。
例如;当有10000字节要处理,当你的读取 ...

谢谢,可是第一种定义了字符数组,不是也相当于缓冲区了吗?
作者: taotao    时间: 2013-8-7 15:52
哪颗最亮的星星 发表于 2013-8-7 09:59
FileReader和FileWriter 需要自己定义缓冲数组,而BufferedReader和BufferedWriter是封装好带缓冲区的流对 ...

O(∩_∩)O~,不在while里用flush()的话,根据老师所讲,数据是不会存储到目的文件中的,那数据存到内存的什么地方了?也就是说在fw.write()之后,fw.flush()之前的数据在哪?
作者: 哪颗最亮的星星    时间: 2013-8-7 16:05
taotao 发表于 2013-8-7 15:52
O(∩_∩)O~,不在while里用flush()的话,根据老师所讲,数据是不会存储到目的文件中的,那数据存到内存 ...

内存中,
作者: taotao    时间: 2013-8-7 17:12
哪颗最亮的星星 发表于 2013-8-7 16:05
内存中,

:L:L:L:L:L:L:L:L:L:L




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2