黑马程序员技术交流社区

标题: 在操作流的时候,有时候关闭流可以写进文件,有时候flush... [打印本页]

作者: axuan    时间: 2014-6-11 10:43
标题: 在操作流的时候,有时候关闭流可以写进文件,有时候flush...
在操作流的时候,有时候关闭流可以写进文件,有时候flush可以写进文件,有什么区别?
   
还是两个必须都执行?什么时候使用flush和close(),有些混乱!!!
作者: 附耳细说    时间: 2014-6-11 10:54
首先  当你用到flush,可以判定你肯定使用的是 字符流操作
作者: 附耳细说    时间: 2014-6-11 10:59
不好意思  用了快速回复   重新写
对于字符流的写入方式,当你调用write方法的时候数据其实是写入数据缓存中但是还没有写入硬盘上, flush方法是把缓存中的数据写入硬盘。
你要写入硬盘,必然要调用操作系统的资源吧,close方法是完成操作后,告诉操作系统资源调用完了,我们需要资源了。同时调用close方法的时候会先默认调用flush方法。
简而言之,就是flush写入硬盘,不归还操作系统资源,还可以继续操作;close写入硬盘,归还操作系统资源,结束操作
OVER~
作者: a6217815    时间: 2014-6-11 11:06
flush:强行将缓冲区里面的数据写出。缓冲区是存满了再往硬盘里面写数据的,但经常会碰到最后一些数据不会刚好存满的情况,这时候就用flush强行将缓冲区里面剩余的数据写到磁盘上。
举例:缓冲区像一个杯子,数据是水壶,每次水壶的水装满杯子,人再喝,但最后一次只有半杯水,于是这时候需要用到flush,使最后半杯水也能直接被喝掉。
close就是关闭流,用上述例子来说,就是最后半杯水不要了,缓冲区未存满导致未写出的数据丢失。
所以 关流之前一定要先flush一下。
作者: yanghu    时间: 2014-6-11 12:01
上边都告诉你了为什么要使用flush的原理,我就给你个小诀窍什么时候用flush?当你调用了windows操作文件的资源时,就要记得close掉,想StringReader这是,它的源是内存而没有操作文件就不用close.
而flush的话,有的流必须要flush才出来,有的调用close()方法后也会出来,你就在Eclipse上面按F3看看该对象的close源码,若源码中调用了flush你就不用再次调用了,源码中没有的话,你自己就手动调用下。
作者: axuan    时间: 2014-6-12 11:14
a6217815 发表于 2014-6-11 11:06
flush:强行将缓冲区里面的数据写出。缓冲区是存满了再往硬盘里面写数据的,但经常会碰到最后一些数据不会 ...

谢谢你的总结




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