下面是某本书上的一段程序代码,有个疑问如下,红色字体..
- Java code
package day1;import java.io.ByteArrayInputStream;import java.io.IOException;public class ByteArrayTester { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub byte[] buff=new byte[]{2,15,67,-1,-9,9}; ByteArrayInputStream in=new ByteArrayInputStream(buff,1,4); int data=in.read(); while(data!=-1){ System.out.println(data+" "); data=in.read(); } try { in.close();//[color=#FF0000]ByteArrayInputStream的close()方法实际上不执行任何操作,那为什么要写呢?还有in对象应该没有销毁吧,个人认为应该加上 in=null;[/color] } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
------解决方案--------------------
ByteArrayInputStream的close()方法实际上不执行任何操作,那为什么要写呢?
流用完了要关闭啊
关闭了虚拟机才知道其已经没有价值了
空闲的时候垃圾回收机制会回收的
还有in对象应该没有销毁吧,个人认为应该加上 in=null;
in=null;是显示的告诉虚拟机它已经没有价值了 可以回收 但什么时候回收是虚拟机决定的
不用显示的写出来 在其没有价值的时候 虚拟机也会回收它的 其实in=null;这样的代码意义不大
------解决方案--------------------
那个只是关闭io流而已,和对象没关系
你可以自己+上判断来调节
不过我想问下lz
你传输完毕以后不关闭,想继续传么?那为什么还要判断?
如果不传了,为什么不关闭?等他报溢出的异常么?
================
不懂你的想法。。。
------解决方案--------------------
对于 ByteArrayInputStream 关不关并不影响 GC 回收其占用的资源,但要记得将引用置空(in = null;),以下是源代码及文档注释:
- Java code
/** * Closing a <tt>ByteArrayInputStream</tt> has no effect. The methods in * this class can be called after the stream has been closed without * generating an <tt>IOException</tt>. * <p> */ public void close() throws IOException { }
------解决方案--------------------
在写数据库程序的时,都有像in=null的语句,好让垃圾收集器把它回收,可能在这里写一下会好一些吧。