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

Con*_*nor 18 java servlets

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

HttpServletRequest httpServletRequest
...
DataInputStream dis = new DataInputStream(httpServletRequest.getInputStream())
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 27

在I/O的经验法则是,如果你没有打开/创建InputStream的来源自己,那么你不一定需要关闭它.这里只是包装请求的输入流,因此您不一定需要关闭它.

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


ska*_*man 9

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