java - 我可以关闭 servlet 中的包装器输入流或输出流类吗?

标签 java servlets inputstream outputstream

我有一个类似的代码...

class DemoServlet extends HttpServlet
 {    
  doPost(HttpReqeust httpRequest,HttpResponse httpResponse)
       {
           try {
               ObjectInputStream input=new ObjectInputStream(httpRequest.getInputStream());
               Object ojb=input.readObject();
               ObjectOutputStream output=new ObjectOutputStream(httpResponse.getOutputStream());
               }
           catch(Exception ex){
                  ex.printStackTrace();
              }
           finally{
               input.close();  // it is necessary to close or it will handle by the servlet container to
               output.close(); // the outputstream or inputstream.
           }
      }}

我知道关闭 httpRequest.getInputStream() 和 httpResponse.getOutputStream() 不是必需的,但是关闭包装输入流和输出流的 Stream 类是否正确。它们是否会产生一些问题或引发异常。

最佳答案

Java SE 中的包装器流/读取器/写入器会关闭底层流(当它们关闭时),因此如果您想让它们保持打开状态,请不要关闭包装器。

编辑: Readerclose() 文档可能解释得更好。包装器(如 InputStreamReader )通常为接口(interface)扩展此类,而不覆盖文档。

如果是ObjectOutputStream情况类似,您可以检查 source 中的行为.

关于java - 我可以关闭 servlet 中的包装器输入流或输出流类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24052691/

相关文章:

java - 接口(interface)中的选项

java - 我从 jsp 页面获取字符串形式的日期如何将其转换为 java.util.Date

java - 在检查套接字的连接时从 BlueToothSocket 的 InputStream 中畅通读取

c++ - 将原始类型的值从标准输入读入变量

java - 使用数组的元素填充另一个数组 - Java

java - 在类 Unix 机器上运行 Talend 作业

servlets - 在 quartz 调度程序中检索 servletContext 引用

tomcat - Unsupported major.minor version 要更改哪一个?

java - Java 中 null(Input/Output)Stream API 的用例是什么?

java - Jackson xml在序列化时忽略空对象