Java - ByteArrayOutputStream是否安全,没有flush()和close()?

lan*_*boy 12 java

那么,如果没有正确刷新和关闭,ByteArrayOutputStream会导致内存溢出吗?我的意思是他们是否有必要将代码放入或Java将垃圾收集它?

Sha*_*Man 11

不,它会在最后一次引用丢失后收集垃圾.

根据javadoc:

关闭ByteArrayOutputStream无效.在关闭流之后可以调用此类中的方法,而不会生成IOException.

另外,如果你看一下代码,两者flushclose没有-OPS的ByteArrayOutputStream类(虽然flush是继承自OutputStream,它是一个空操作中OutputStream,除非在具体实施覆盖).


Ste*_*n C 8

是。可以flush()或不可以是安全close()ByteArrayOutputStream。不论是否使用,都不会对内存使用造成任何影响。

唯一与a close()flush()有任何关联的情况ByteArrayOuputStream是,您已在包含缓冲组件的输出管道的末尾使用了它;例如BufferedWriter。然后,您确实需要从管道的“顶部”刷新或关闭...以确保所有数据都将其放入字节数组。

调用flush()或不会对GC产生任何影响close()。无论哪种方式,只要对象保持可访问状态,流的内容将继续保留在内存中。(相比之下,需要及时关闭对外部资源的读/写流,因为它们具有需要释放的外部“资源描述符” ...)

综上所述:

  • 它没有伤害flush()close()光秃秃的ByteArrayOutputStream。只是没有必要。
  • 通常有必要关闭以结尾的输出管道ByteArrayOutputStream,但这不是由于内存使用或GC考虑。
  • (至少)使用内存,只要ByteArrayOutputStream对象可访问即可。