CloseShieldInputStream与NoCloseInputStream

时间:2014-09-16 10:05:39

标签: java inputstream apache-commons-io

Apache Commons'之间是否存在差异? CloseShieldInputStream和Sun的NoCloseInputStream(实际上在我的JDK中我有com.sun.xml.internal.ws.util.NoCloseInputStream但没有com.sun.xml.ws.util.NoCloseInputStream

来自文档:

  

CloseShieldInputStream - 阻止基础输入流的代理流   闭合。

     
     

NoCloseInputStream - InputStream无法关闭。

1 个答案:

答案 0 :(得分:3)

有一个微妙的区别:

  1. CloseShieldInputStream:调用close方法后,系统会删除对最初代理的InputStream的引用,并替换为no-op implementation。关闭流后,它不再可访问,但只暴露no-op流。然而,原始流从未关闭。

  2. NoCloseInputStream:重写close方法不执行任何操作,即不调用代理InputStream。在流可能被“关闭”之后,因此可以使用它,好像从未调用close一样。但是,添加的方法doClose仍会显示原始结算功能。

  3. NoCloseInputStream的两个版本之间没有区别,因为internal不应该被使用,因为它被认为是Sun的JAX-WS实现的内部。后来移动了这个内部实现,使其成为公共API,这就是包名更改的原因。