java - 我应该通过 response.getOutputStream() 显式关闭 ZipOutputStream 吗?

标签 java servlets memory-leaks io resource-management

我已阅读以下主题: Should one call .close() on HttpServletResponse.getOutputStream()/.getWriter()?

但是如果我使用下面的结构呢:

    ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());

我应该关闭它还是容器会代替我来做?

最佳答案

是的,您应该显式调用ZipOutputStream 上的close() 方法,here's close() 方法的代码。它执行以下操作:

  • 调用父类(super class)的close(),在我们的例子中是DeflaterOutputStream
  • DeflaterOutputStream
  • close() 在调用底层 上的 close() 之前调用 finish()输出流

finish() 方法写入剩余的压缩数据,因此如果您不在 ZipOutputStream< 上调用 close(),您可能会得到一些未写入的数据明确。所以,我建议调用它。

关于java - 我应该通过 response.getOutputStream() 显式关闭 ZipOutputStream 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46400625/

相关文章:

Java TextField 日期自动填充

java - 从 json 编码/解码到 java.util.Map 的库?

java - HttpServlet 上的 Autowiring

c++ - QDialogs 中是否需要析构函数?

c++ - 它会导致内存泄漏吗?

Angular2/4 : Refresh Data Realtime

java - android-无法加载多个YouTube视频

java - 如果两个类扩展不同的类,避免重复代码的最佳方法

java - HTML5 服务器端事件 (SSE)

java - Servlet编译错误