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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jordon 中级黑马   /  2012-10-11 14:40  /  2028 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

字节流中不需要flush,为什么FileOutputStream类里还有此方法,具体什么情况下要用到呢?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
FileOutputStream类里中的 flush();方法继承自父类 OutputStream 的flush 方法,他调用时也是调用

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

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

出去的原因也是没有执行flush()方法或close()方法。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

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

关于文件流的某些时候即便flush刷新之后也没有正确将数据写入文件,你可以用FileOutputStream里边的getFd获得该流指向的文件描述符,这个文件描述符属于一个中间的关联纽带,其中的sync方法会强制操作系统完成写入操作然后才返回方法。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
刘蕴学 发表于 2012-10-11 18:24
字节流不是不需要flush。。。那是指从非本地磁盘的存储空间或者网络来源的流输出数据不需要flush,但是本地 ...

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

父类的O ...

--------------------------------------------------
回复 使用道具 举报
本帖最后由 叶征东 于 2012-10-13 04:07 编辑

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