是否有必要关闭从HttpServletRequest返回的输入流?

我有一些生产代码可以执行以下操作:

HttpServletRequest httpServletRequest ... DataInputStream dis = new DataInputStream(httpServletRequest.getInputStream()) 

这些流永远不会明确关闭。 我在这里假设servlet容器管理它(JBOss Web)。 处理这个问题的正确方法是什么?

I / O中的拇指规则是,如果您没有自己打开/创建输入流源,那么您也不一定需要关闭它。 这里只是包装请求的输入流,因此您不一定需要关闭它。

如果您确实通过new FileInputStream("c:/file.ext")自己打开输入,那么您显然需要在finally块中自己关闭它。 容器应该在引擎盖下这样做。

你绝对应该自己关闭这些流,这是容器的工作。 手动执行此操作可能会干扰请求生命周期,并且某些容器可能会对此进行猛烈反对。

容器将处理这个。 在分配它的同一个地方关闭资源总是很好的编码风格。 (在我原来的post里,我错了。我以为你打开了流。应该仔细阅读。)

规范(最多3.0候选人)没有说(据我所知)。 在没有规范信息的情况下,您可能会受到实施的支配。

Sun Servlet页面上提到了参考实现的源代码:

参考实现包含在Java EE 5 SDK中,也包含在Java.net上通过GlassFish项目提供的开源Java平台企业版(Java EE)应用程序服务器中。 Servlet技术的参考实现源代码可从java.net上的svn存储库获得。 有关GlassFish中所有webtier技术的更多信息,请访问GlassFish Webtier页面。

检查行为可能与您获得的确定答案一样接近。