黑马程序员技术交流社区

标题: 关于flush方法的一点思考 [打印本页]

作者: Jordon    时间: 2012-10-11 14:40
标题: 关于flush方法的一点思考
字节流中不需要flush,为什么FileOutputStream类里还有此方法,具体什么情况下要用到呢?
作者: 孙含庆    时间: 2012-10-11 16:30
FileOutputStream类里中的 flush();方法继承自父类 OutputStream 的flush 方法,他调用时也是调用

父类的OutputStream 的flush();方法,用完流后都要执行关流操作,close()底层在关流时都会调用一下

flush()方法,刷新一下流,再执行关闭操作。所以一般情况下是不用调用flush()方法的,一般文件写不

出去的原因也是没有执行flush()方法或close()方法。
作者: 刘蕴学    时间: 2012-10-11 18:24
字节流不是不需要flush。。。那是指从非本地磁盘的存储空间或者网络来源的流输出数据不需要flush,但是本地磁盘的存储是操作系统管理的,java无法保证操作系统的执行情况,也就是操作系统什么时候写进磁盘或者写没写进去是无法保证的。
通俗点说就是正常情况下,也包括flush方法,仅仅是告诉系统,我要写这些数据,但是操作系统可能很忙,就没管你,然后你以为他写完了,流关闭了,结果数据只写了一部分,还差一部分。

关于文件流的某些时候即便flush刷新之后也没有正确将数据写入文件,你可以用FileOutputStream里边的getFd获得该流指向的文件描述符,这个文件描述符属于一个中间的关联纽带,其中的sync方法会强制操作系统完成写入操作然后才返回方法。
作者: Jordon    时间: 2012-10-12 09:20
刘蕴学 发表于 2012-10-11 18:24
字节流不是不需要flush。。。那是指从非本地磁盘的存储空间或者网络来源的流输出数据不需要flush,但是本地 ...

受益匪浅,非常感谢!!!
作者: 叶征东    时间: 2012-10-13 03:34
本帖最后由 叶征东 于 2012-10-13 04:07 编辑
孙含庆 发表于 2012-10-11 16:30
FileOutputStream类里中的 flush();方法继承自父类 OutputStream 的flush 方法,他调用时也是调用

父类的O ...

--------------------------------------------------
作者: 叶征东    时间: 2012-10-13 03:43
本帖最后由 叶征东 于 2012-10-13 04:07 编辑

------------------------------





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