我读过以下主题: Should one call .close() on HttpServletResponse.getOutputStream()/.getWriter()?
但是如果我使用以下结构怎么办?
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
我应该关闭它还是容器会代替我?
答案 0 :(得分:1)
一般来说,关闭最外层的流会将close()
传播到内部流,关闭所有必需的资源。
当然,完全可以创建一个表现不佳的流,但ZipOutputStream
可能不是一个。
在某些情况下,在最外层的流上调用close()
可能是不够的,但该类的文档应该表明任何特殊行为。
答案 1 :(得分:1)
是的,您应该在close()
上明确地ZipOutputStream
方法,here's close()
方法的代码。它执行以下操作:
close()
,在我们的案例中为DeflaterOutputStream
close()
上致电DeflaterOutputStream
之前,finish()
次close()
来电OutputStream
finish()
。 此close()
方法会写入剩余的压缩数据,因此如果您未明确调用ZipOutputStream
上的function add_and_keeper(){
let $and_keepers = $("#and_keepers"); // $and_keepers = [td#and_keepers]
let $keeper_choice_clone = $person_choice.clone() // $keeper_choice_clone = [select#id_person_choice, prevObject: r.fn.init(1)]
let $wrapped = $keeper_choice_clone.wrap("<div>"); // $wrapped = [select#id_person_choice, prevObject: r.fn.init(1)]
let $new_elem = $and_keepers.append($wrapped).children("select:last-child");
}
,则最终可能会收到一些未写入的数据。所以,我建议打电话给它。