io流如果不关掉会有什么后果??

renwangxing 2008-05-26 09:30:13
比如下面的类少了in.close();这个语句会发生什么后果?还有,我这个方法写对吗?

public class ConnectServer {
public boolean isAppInit() {
boolean appInit=true;
URL myURL;
try {
myURL = new URL("http://www.sifg.com.cn/index.jsp");
InputStream is = myURL.openStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
if((in.readLine()) == null) {
appInit=false;
return false;
}
in.close();
} catch (MalformedURLException e) {
System.out.println("服务器连接没有启动");
return false;
}catch(IOException e1){
System.out.println("读取服务器URL出现错误");
return false;
}
return appInit;
}
}
...全文
10429 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
renwangxing 2008-05-26
  • 打赏
  • 举报
回复 1
好,以后写就要注意用finally把它关掉
yinfei456 2008-05-26
  • 打赏
  • 举报
回复
虽然java会自动帮你关闭,但是还是自己写一下比较好
maquan 2008-05-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 maquan 的回复:]
也不是所有的资源都能自动回收,比如 FileInputStream,你要是忘记关闭了,它就一直占用着,直到 JVM 退出。
[/Quote]

修正一下。

如果 FileInputStream 对象满足了垃圾回收条件,JVM 会调用其 finalize(),从而调用 close() 关闭文件。

不过,还是那个原则:要主动控制,不要寄希望于系统的自动回收。
我是小辉辉 2008-05-26
  • 打赏
  • 举报
回复
如果你不关IO流,假如你是在做项目,那么你会挨骂,然后是对性能的影响,(资源的占用等)
quailman 2008-05-26
  • 打赏
  • 举报
回复
I/O这东西一般都要关掉,这样资源不会被永久占用,释放一部分资源给其他业务系统才能稳定运行。
老紫竹 2008-05-26
  • 打赏
  • 举报
回复
不知道什么时候会断掉,需要根据你链接的那一方的协议和timeout设置了。

如果是http协议,则不用担心,因为keep-alive是维持不了几秒钟的。
maquan 2008-05-26
  • 打赏
  • 举报
回复 4
虽然都是 InputStream,但不同的物理实现,close() 的物理作用也有所不同,所以忘记了 close() 的后果也不一样。

比如 ByteArrayInputStream 这种输入流,close() 与否就没什么关系。

楼主的例子中,实际的输入流是一个网络连接。如果忘记 close() 的话,它会一直占用着,直到 timeout 后系统自动关闭这个网络连接。也就是说,如果你忘记了关闭这个资源,到了一定的时候,系统会替你关闭。但如果类似这样的程序被执行很多次,就会有大量资源被长时间无效占用,极端情况下可能导致后续程序资源不足而失败。

也不是所有的资源都能自动回收,比如 FileInputStream,你要是忘记关闭了,它就一直占用着,直到 JVM 退出。

所以,回过来说,好的编程习惯是:主动用程序严格控制对资源的释放,而不必区分其具体的物理实现,不要指望系统级的回收机制。这样能保证程序的可读性和可靠性。
ThirdDimension 2008-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lovingprince 的回复:]
如果不关闭的话,那么这个IO资源就会被他一直占用,这样别人想用就没有办法用了,所以这回造成资源浪费。

你要关闭资源,最好写在finally中,如果这个东东出现一个异常,你就关不掉了。
[/Quote]
rascalboy520 2008-05-26
  • 打赏
  • 举报
回复
java的特点之一就是它有自己的垃圾回收机制,close()方法可以将对象占用的资源释放,减少资源的浪费,同时在逻辑上,也是程序员应该习惯做到的,这样对程序也是安全的,
guoxiaopeng1982 2008-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lovingprince 的回复:]
如果不关闭的话,那么这个IO资源就会被他一直占用,这样别人想用就没有办法用了,所以这回造成资源浪费。

你要关闭资源,最好写在finally中,如果这个东东出现一个异常,你就关不掉了。
[/Quote]
同意…………
刘彬彬 2008-05-26
  • 打赏
  • 举报
回复
首先,你的代码是对的!
close()方法的作用是释放资源!
把对象设为NULL,让垃圾回收机来回收!
chao_1027 2008-05-26
  • 打赏
  • 举报
回复
因为你的inputstream在try中,如果前面的语句出现exception,就没有关闭流.
没有关闭简单来说的后果就是:该资源还是被占用着,没有释放,如果再来一个请求,
就会抛出RuntimeExcetion.
lovingprince 2008-05-26
  • 打赏
  • 举报
回复
如果不关闭的话,那么这个IO资源就会被他一直占用,这样别人想用就没有办法用了,所以这回造成资源浪费。

你要关闭资源,最好写在finally中,如果这个东东出现一个异常,你就关不掉了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧