英语轻松读发新版了,欢迎下载、更新

文件操作完后为什么要关闭流?

LLeiFeng 发布于 2016年01月28日
无人欣赏。

以前一直没注意,写代码只知道文件操作完后要关闭流,没有想过为什么要去关闭流? 今天突然想到这个问题,一时还真没想明白,就想没关闭后程序会报异常~ 具体为什么要关闭流,求大神指点~谢谢!

共7条回复
ventus 回复于 2016年01月29日

不是大神,想到两点。一是释放缓存,如果不关闭流会造成内存泄露。二是,如果存在写操作,有些是在缓存中还没真正写道磁盘文件中,关闭流的时候回刷新缓存,真正将数据写到磁盘文件中

LLeiFeng 回复于 2016年01月29日

1楼 @ventus 查了一下垃圾回收期不会回收这种流资源,必须手工去close回收~

tinyfool 回复于 2016年01月29日

不要拘泥于流这个说法,流只是一种抽象,方便组合和理解,如果理解不了,暂时不用去管他

文件一般都是在硬盘的,硬盘比内存慢1000倍左右(SSD缓解了这种速度差异,但是仍旧有)。另外,硬盘的随机读取是比较慢的(硬盘是一个盘子,连续读取可以在一次旋转中完成,读多个不同位置,而且顺序不规律的话,就必须走多次旋转,当然硬盘也有缓存,姑且理解为它没有缓存,简化理解),内存随机读取和连续读取性能差不多。

所以,对文件的读写都是带缓存的,理论上缓存不满,是不把读写加之到实际硬盘的(也有反例,也可以强制写)。而关闭文件则是释放缓存所占内存,同时,保证缓存的内容写回到硬盘。

人在江天 回复于 2016年01月29日

常见的操作系统,对于文件的读写接口都是通过描述符或者句柄来间接提供SDK,真正的读写是在内核。而这些描述符或者句柄,设计的时候都是有数量上限的,不释放的后果就是到最后系统无法分配资源,只能重启。

ouyangbo100 回复于 2016年01月29日

因为不自动回收

wangxl 回复于 2016年01月30日

3楼 @tinyfool 好精辟!满满的quora味道 :-)

tinyfool 回复于 2016年01月30日

6楼 @wangxl 哈哈

登录 或者 注册