流的close()为什么表面上看感觉可有可无?请讲解以下这个函数的作用以及没有他会有什么后果?

解决方案 »

  1.   

    流是资源,要区分资源和内存,内存JVM帮你释放,但是资源还是要手工释放的.
    什么是资源,比如文件,Socket,管道,等等.释放是个逻辑问题,你不需要它就应该显式的释放它.不能等着JVM去gc到它.那个时候,黄花菜都凉了...
      

  2.   

    虽然说垃圾收集器会将其收集的,但是不close()的话,
    在写入多的数据时会产生些问题,有可能有些数据并没
    有完全写入到流中去。
      

  3.   

    如果是BufferedOutputStream,你不Close的话就可能造成最后缓存中的数据丢失了!
    所以Close是必须的,而绝非可有可无。