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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄成超 中级黑马   /  2013-2-15 21:22  /  1645 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在毕老师的IO键盘录入一节(19-15)中说,程序一结束,键盘录入也就结束了,所以不关闭也没关系。我想问的是,在数据读或写操作流中,为什么就一定要关闭读写操作流呢?程序执行完不是一样会自己结束吗?

3 个回复

倒序浏览
比如在操作读写流的时候,其实并不是 close 了才完成,只要在完成所有的 write 操作之后记得加上一个 flush 就可以把缓冲中未写入的数据填入目标流。
而不是 close 才能完成复制
调用close时会调用flush。你可以看一下父类的close方法的实现。
flush() 是把缓冲区的数据强行输出, 主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。
回复 使用道具 举报
关闭流主要是为了释放资源,这样养成好习惯,做到用完就释放,是一种好思想。因为有些资源很珍贵,比如数据库连接,不及时释放后果很严重。。。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报

从你的问题中就可以看出你对程序执行的具体细节还是不太清楚!

首先,当你用到IO流操作的时候,就涉及到了硬盘的读写,这就是计算机的硬件资源,
而对于一个计算机来说,它的硬件资源是有限的,如果使用完毕之后不及时的释放,就会浪费大量
珍贵的资源,普通情况下你是不易觉察到的,但如果计算机里面的线程比较多,而且连续运行时间
较长,“死机”的痛苦就将成为家常便饭了!


对于你的疑问,为什么“程序运行完后不自己结束”,我的回答是——这里面涉及到了一个“时间”的
问题:

        1、当你手动的调用close()方法时,资源将会被立即释放
        2、相反的你等着系统释放这将浪费一定的时间,因为系统是不可能立即就找到垃圾并把它
        清理掉的


所以一定要养成“用完就关”的好习惯!

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

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