当前位置: 代码迷 >> J2SE >> 关于IO的一点疑问解决方案
  详细解决方案

关于IO的一点疑问解决方案

热度:87   发布时间:2016-04-24 13:02:05.0
关于IO的一点疑问
下面是某本书上的一段程序代码,有个疑问如下,红色字体..

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的语句,好让垃圾收集器把它回收,可能在这里写一下会好一些吧。
  相关解决方案