Đóng luồng trình bao bọc tự động đóng luồng bên trong.
Vì vậy, trong trường hợp của bạn, bạn chỉ cần đóng ZipOutputStream
. Đóng một dòng hai lần không ném một ngoại lệ do đó đóng một dòng bên trong một lần nữa (mặc dù không cần thiết) hoạt động như là tốt.
Đây là những gì xảy ra khi bạn khởi tạo một ZipOutputStream
public ZipOutputStream(OutputStream out) {
this.out = out; // BufferedOutputStream reference saved
}
Đây là việc thực hiện các ZipOutputStream.close()
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close(); // BufferedOutputStream being closed
}
Tương tự, BufferedOutputStream
tự động đóng FileOutputStream
thông qua kế thừa của nó FilterOutputStream#close()
đã được thực hiện như:
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close(); // FileOutputStream being closed
}
Nguồn
2013-08-05 09:06:53
Bạn cũng nên cẩn thận * luôn * đóng luồng ngoài cùng; nếu không bạn có thể bị mất dữ liệu do các bộ đệm không bị dính trong các luồng bao bọc có dòng bọc của chúng được đóng lại dưới mũi của chúng. –