gpt4 book ai didi

Java 不希望我在使用 inputStream 之前关闭 outputStream?

转载 作者:行者123 更新时间:2023-11-29 22:22:07 26 4
gpt4 key购买 nike

我有(一个公认的奇怪的)try/catch block ,它检查 File 是否存在。如果没有,那么我创建它并向其写入一个 File。然后我读取了 File

我有一个 ArrayList,它通过从 ObjectInputStream 中读取一个对象来初始化。在最初使用 FileOutputStreamObjectOutputStream 编写文件时,如果我对它们调用 close(),那么我的 ArrayList 保持为 null。如果我简单地删除对 close() 的调用,一切都会按计划进行。

这对我来说似乎倒退了。如果我打开了某种类型的 stream ,我会认为文件系统以某种方式“锁定”了。这就是为什么我想在使用 inputStream 之前关闭 outputStreams。但是不,Java 不会让这个工作,除非我保持 outputStreams 打开。

这是我的代码,包括注释掉的对 close() 的调用,它允许它正常工作:

try {
File file = context.getFileStreamPath("file");
} catch (Throwable e) {
e.printStackTrace();

try {
FileOutputStream fileOutputStream = context.openFileOutput("file", Context.MODE_PRIVATE);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);

reminders = new ArrayList<Reminder>();
objectOutputStream.writeObject(reminders);
// fileOutputStream.close();
// objectOutputStream.close();
} catch (Throwable t) {
t.printStackTrace();
}
}

try {
FileInputStream fileInputStream = context.openFileInput("file");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
if (objectInputStream != null) {
reminders = (ArrayList<Reminder>) objectInputStream.readObject();
}
} catch (Throwable t) {
t.printStackTrace();
}

最佳答案

你不应该关闭 fileOutputStream。关闭 objectOutputStream 将关闭 fileOutputStream。

在 objectOutputStream 之前关闭 fileOutputStream 将阻止 objectObjectStream 将其内容刷新到文件中,因为 fileOutputStream 已经关闭。

不确定为什么不关闭两者都允许代码工作,除非 objectOutputStream finalize 方法在超出范围时刷新内容。

关于Java 不希望我在使用 inputStream 之前关闭 outputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918154/

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