public byte[] getData() throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(buffer);
out.writeObject(this);
out.close();
return buffer.toByteArray();
}这里的 buffer 没有关闭,会造成内存泄露吗?

解决方案 »

  1.   

     貌似 jdk1.7 后 sun 会帮你关闭,之前的 是需要自己 显示去关闭,不然 会有 问题
    哥哥
      

  2.   

    byte[] b = buffer.toByteArray();
    buffer.close();
    return b;
      

  3.   

    out.close(); 放到 finally里就不泄露了
      

  4.   

    ByteArrayOutputStream 不用关闭,它的 close() 方法是个空的。
      

  5.   

    方法执行完成之后,buffer.toByteArray()的byte数组可以被回收吗?
      

  6.   

    不会的 
    这是典型的Decorator模式。
    objectoutputstream.close()
    的时候已经调用了bufferdoutputstream.close()方法。
    原因是他们都继承自outputsstream方法。。
    楼主对Decorator模式熟悉的话就知道了。
      

  7.   

    sun会帮你关闭?
    老兄请你说话严谨一点!!!
      

  8.   

    你不关闭的话肯定会造成内存泄露,
    你循环运行1000次试下,就知道了。
    或者
    找个内存测试软件试一下就行了。JDK 1.7?它傻啊?
      

  9.   

    哎,白说了!ByteArrayOutputStream 中的 close 方法是个空方法(看看源代码就知道了),这是一个 byte[] 的字节流用不用 close 无没有任何影响,看看 ByteArrayOutputStream#close 方法就知道了。ByteArrayOutputStream 就相当于一个 byte[],不知道大家用完 byte[] 是否需要 close 呢?如果不需要,那 ByteArrayOutputStream 又为什么需要呢?
      

  10.   

    ByteArrayOutputStream 中的 close 方法确实是个空方法。
      

  11.   

    try{
    ....
    }catch(Exception e){}finally{
      ...//close
    }
      

  12.   

    如果服务器端的方法是这样描述的:
    public DataHandler downLoad(String fromPath) throws Exception {
    DataSource source = new FileDataSource(
    new File("d:\\pics\\" + fromPath));
    DataHandler handler = new DataHandler(source);
    return handler;
    }那么如果多次进行访问后,是否可能会出现内存泄露情况?