java - 从文件中读取对象 - 消失的引用
问题描述
我正在尝试做这样的事情:
人; PersonList(ArrayList) 包含人;
摘要包含 PersonList;
SummaryList (ArrayList) 包含摘要。
接下来我想修改我的 Person 并将其保存到文件中,如下面的代码:
//first run
personList.addPerson(); // PersonArrayList: [Person: Anonymous Person]
summaryList.addSummary(personList); // SummaryArrayList: [Summary: Test, PersonArrayList: [Person: Anonymous Person]]
modifyPerson(personList); // set lastName to ModifiedPerson
// PersonArrayList: [Person: Anonymous ModifiedPerson]
// SummaryArrayList: [Summary: Test, PersonArrayList: [Person: Anonymous ModifiedPerson]]
save.savePersonListToDatabase(personList);
save.saveSummaryToDatabase(summaryList);
/*
here is OK. Is one instance of PersonList and one instance of Person. Change in Person affect to both Lists.
end of first run
*/
接下来我想从文件中读取它。我使用此代码从文件中读取(类似于保存):
public Object readObjectFromFile(String filePath) throws IOException, ClassNotFoundException {
fileInputStream = new FileInputStream(filePath);
objectInputStream = new ObjectInputStream(fileInputStream);
Object object = objectInputStream.readObject();
System.out.println("Read " + filePath + " is OK");
objectInputStream.close();
return object;
}
public PersonList readPersonListFromDatabase() {
try{
String personFilePath = "PersonList.obj";
personList = (PersonList) readObjectFromFile(personFilePath);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return personList;
}
第二次运行:
//second run
personList = read.readPersonListFromDatabase();
summaryList = read.readSummaryListFromDatabase();
/*
here is NOT ok. There are two instances of PersonList and two instances of Person. Change in Person does
not affect on SummaryList (because there are different instances of it)
*/
我使用Serializable
和FileOutputStream
/ObjectOutputStream
来保存它。
我想运行程序,做我的事情,保存并关闭。在下一次运行中,我想从文件中读取所有内容。
如果我想在从文件读取后保留所有引用,我该怎么办?
解决方案
最后,我找到了解决方案。
关注这篇文章https://stackoverflow.com/a/10374665/14558334
我创建了一个看起来像这样的“容器”类:
public class ClassContainer implements Serializable {
private SummaryList summaryList;
private PersonList personList;
public ClassContainer(SummaryList summaryList, PersonList personList) {
this.summaryList = summaryList;
this.personList = personList;
}
}
多亏了这一点,我只保存/读取了一个对象,每个引用都保存了。
也许这不是最好的解决方案,但它工作正常。
推荐阅读
- javascript - 如何在角度模块 app.module.ts 中加载 highcharts 注释模块?
- angular - 表单错误不可见
- php - Sql 正确过滤字符串列中的浮点值
- java - StackOverflowError:ProgressBar 的 Android 8.1 上的堆栈大小为 8MB
- python - 多进程如何共享一个公共队列?
- json - 通过 Ansible playbook 确保配置文件(用于 Atom IDE)中有一些字段
- sapui5 - SAP Fiori 性能测试
- android - 如何使用相机捕获图像并将其保存在服务器上?
- python - 在 python/pandas 中将年/月转换为年/月/日
- java - 通过邻接表的前序遍历