黑马程序员技术交流社区
标题:
IO输入一节小问题。。。。
[打印本页]
作者:
黄成超
时间:
2013-2-15 21:22
标题:
IO输入一节小问题。。。。
在毕老师的IO键盘录入一节(19-15)中说,程序一结束,键盘录入也就结束了,所以不关闭也没关系。我想问的是,在数据读或写操作流中,为什么就一定要关闭读写操作流呢?程序执行完不是一样会自己结束吗?
作者:
李易烜
时间:
2013-2-15 22:11
比如在操作读写流的时候,其实并不是 close 了才完成,只要在完成所有的 write 操作之后记得加上一个 flush 就可以把缓冲中未写入的数据填入目标流。
而不是 close 才能完成复制
调用close时会调用flush。你可以看一下父类的close方法的实现。
flush() 是把缓冲区的数据强行输出, 主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。
作者:
李东城
时间:
2013-2-16 00:04
关闭流主要是为了释放资源,这样养成好习惯,做到用完就释放,是一种好思想。因为有些资源很珍贵,比如数据库连接,不及时释放后果很严重。。。
作者:
李大强
时间:
2013-2-16 10:03
从你的问题中就可以看出你对程序执行的具体细节还是不太清楚!
首先,当你用到IO流操作的时候,就涉及到了硬盘的读写,这就是计算机的硬件资源,
而对于一个计算机来说,它的硬件资源是有限的,如果使用完毕之后不及时的释放,就会浪费大量
珍贵的资源,普通情况下你是不易觉察到的,但如果计算机里面的线程比较多,而且连续运行时间
较长,“死机”的痛苦就将成为家常便饭了!
对于你的疑问,为什么“程序运行完后不自己结束”,我的回答是——这里面涉及到了一个“时间”的
问题:
1、当你手动的调用close()方法时,资源将会被立即释放
2、相反的你等着系统释放这将浪费一定的时间,因为系统是不可能立即就找到垃圾并把它
清理掉的
所以一定要养成“用完就关”的好习惯!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2