是否有必要关闭从 HttpServletRequest 返回的输入流?
我有一些生产代码可以执行以下操作:
HttpServletRequest httpServletRequest
...
DataInputStream dis = new DataInputStream(httpServletRequest.getInputStream())
这些流永远不会显式关闭。我在这里假设 servlet 容器管理它(JBOS Web)。处理此问题的正确方法是什么?
我有一些生产代码可以执行以下操作:
HttpServletRequest httpServletRequest
...
DataInputStream dis = new DataInputStream(httpServletRequest.getInputStream())
这些流永远不会显式关闭。我在这里假设 servlet 容器管理它(JBOS Web)。处理此问题的正确方法是什么?
I/O 中的经验法则是,如果您没有自己打开/创建输入流源,则不一定也需要关闭它。在这里,您只是包装请求的输入流,因此不一定需要关闭它。
如果您确实通过以下方式自行打开输入: 那么你显然需要在最后的块中自己关闭它。容器应该在引擎盖下这样做。new FileInputStream("c:/file.ext")
您绝对不应该自己关闭这些流,这是容器的工作。手动执行此操作可能会干扰请求生命周期,并且某些容器可能会强烈反对您这样做。