黑马程序员技术交流社区

标题: 关于IO流中的flush方法 [打印本页]

作者: 谢冬    时间: 2013-3-9 11:11
标题: 关于IO流中的flush方法
有点模糊 在输出流中不需要调用flush方法,在所有的输入流中,好像有的输入流不需要掉用flush方法,而有的又必须调用flush方法。请大侠们做详细概括
作者: 夏晓彤    时间: 2013-3-9 16:17
本帖最后由 夏晓彤 于 2013-3-9 16:19 编辑

lush刷新此输出流并强制写出所有缓冲的输出字节。flush 的常规协定是:如果此输出流的实现已经缓冲了以前写入的任何字节,则调用此方法指示应将这些字节立即写入它们预期的目标。
如果此流的预期目标是由基础操作系统提供的一个抽象(如一个文件),则刷新此流只能保证将以前写入到流的字节传递给操作系统进行写入,但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。
例有些类有缓存,BufferedOutputStream。
有些类没有缓存,比如网络或设备操作的时候一些仅以OutputStream接口形式得到的流。

对于有缓存的流,如果在输出后,如果需要立即从流代表的数据上读入,之前就要写个flush确保完全输出。比如一边写文件,一边又读取该文件刚写的内容。

作者: 黑马斯巴达    时间: 2013-3-9 16:40
本帖最后由 谢军 于 2013-3-9 16:43 编辑

用毕老师说的话就是如果想把我流中的数据放到目的地中,这是我们就要用到flush
将流对象中临时缓冲的数据清空弄到目的地里面去,所以我的理解是在写输入输出流的时候要观察下一步你要做什么,如果要马上对流对象进行输出之类的操作,那么就要立刻进行flush吧,而有一些语句不是立刻对流进行输出,而是对流中的数据进行其他操作,那就可以最后用close方法在关闭的动作同时进行刷新操作。。所以呢,所有流都会用到flush或者close进行刷新操作的只是看具体的要求。。个人见解。。
作者: 谢洋    时间: 2013-3-10 00:55
1、首先,你把问题说反了,好像输入流不需flush,输入出需要:输入输出通常是相对内存来说的
2、个人理解:
   读取流都不用flush,因其读取时,相对于内存来说从某个地方把数据读取过来,内存本身就目的地,还把数据flush到哪?
   输出流需要flush,但有些输出流是自动刷新,不用显式刷新;输出流并没有直接把数据直接写到硬盘,而是放到缓冲区,等到需要时才刷新到硬盘中,因为直接在缓冲区修改操作这数据要比在硬盘上直接操作要快得到,不用再到硬盘上取出来再做修改操作。
3、他们都可以有缓冲区,但不一定都要刷新,所有输出流都有缓冲,因为我看到输出流的基类,有flush这个方法
作者: 王家辉    时间: 2013-3-10 09:51
楼上正解。
作者: 陈丽莉    时间: 2013-3-10 19:08
如果清楚了,请将帖子分类改成【已解决】~ 还有问题请继续追问。




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