gpt4 book ai didi

Java - 关闭多层流包装器

转载 作者:搜寻专家 更新时间:2023-11-01 02:48:32 24 4
gpt4 key购买 nike

在Java中,我们通常使用一个流对象来包装另一个流类以提高效率。例如:

Object obj = new MyClass();
try {
FileOutputStream fos = new FileOutputStream("test.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(obj);
oos.flush();
} catch(IOException e) {
e.printStackTrace();
} finally {
fos.close();
oos.close();
}

我使用 ObjectOutputStream 来包装 FileOutputStream。类似的情况是使用 BufferedReader 来包装 InputStreamReader

我的问题是如何按顺序正确关闭fosoos。应该先关闭哪个?或者只需要关闭其中一个。通常关闭两个流都会起作用,但我对这种方式感到不舒服,因为我不理解语义。我只是使用关闭方法关闭所有内容,而我不知道为什么不关闭 fosoos

最佳答案

关闭包装流会自动关闭内部流。

因此,在您的情况下,您只需要关闭 ObjectOutputStream。关闭流两次不会引发异常,因此您已经在做的事情(尽管没有必要)也能正常工作。

以下是实例化 ObjectOutputStream

时发生的情况
public ObjectOutputStream(OutputStream out) throws IOException {
bout = new BlockDataOutputStream(out); // inner stream being wrapped
...
}

下面是ObjectOutputStream.close()的实现

public void close() throws IOException {
flush();
clear();
bout.close(); // inner stream being closed
}

关于Java - 关闭多层流包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16578720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com