2个问题,请高手解答:1.请问如果我定义一个 InputStream in;
然后 in=ds.getInputStream();------------------ds是一个构造好的 javax.activation.datasource如果 我在用完in变量以后 不调用 in.close 会不会出现 内存泄漏 ?2.请问在下面的程序中会不会有内存泄漏?InputStreamReader inr = new InputStreamReader( zipFile.getInputStream(confEntry));
BufferReader reader = new BufferReader( inr );
try
{
....//do something using reader
}
reader.close();程序中没有调用 inr.close() ,是否会造成 InputStreamReader对应的资源不能释放?
然后 in=ds.getInputStream();------------------ds是一个构造好的 javax.activation.datasource如果 我在用完in变量以后 不调用 in.close 会不会出现 内存泄漏 ?2.请问在下面的程序中会不会有内存泄漏?InputStreamReader inr = new InputStreamReader( zipFile.getInputStream(confEntry));
BufferReader reader = new BufferReader( inr );
try
{
....//do something using reader
}
reader.close();程序中没有调用 inr.close() ,是否会造成 InputStreamReader对应的资源不能释放?
2、reader.close是会内含调用了inr.close的,JDK中的类都是这样设计的,可以不需要显示调用inr.close
BufferReader reader = new BufferReader( inr );
这是包装模式,关闭时只需关最外层流,外层流的close方法会调用内层流的close方法。
另外一个原则是谁申请谁释放,如果一个流不是你new的,而是由方法中传进来的,就不要关闭,由new这个流的方法负责释放,避免外层方法出现异常。