日期:2014-05-20  浏览次数:21378 次

ZipOutputStream close 与 finish的区别是什么?finish的使用场景是什么?
下面是jdk中的描述:

close
public void close()
  throws IOException关闭 ZIP 输出流和正在过滤的流。

finish
public void finish()
  throws IOException完成写入 ZIP 输出流的内容,无需关闭基础流。对同一输出流连续应用多个过滤器时使用此方法。 


今天在用findbug检视项目代码时候,报Method may fail to close stream ,从提示信息看是有流没有关闭,
跟到代码中看了下,发现是ZipOutputStream 并没有使用close()关闭流,而是使用的finish(). 
到网上搜了下没有找到finish()的太多资料,各位看官对finish()的使用场景有何见解,小弟请教了。

------解决方案--------------------
我的理解:close是关闭了基础流和ZIP流,而finish是关闭了ZIP流,当一个基础流被多个ZIP流使用时,你的基础流被close关闭了,于是就用不了了