我想要构建一个应用程序,这是我的第一次,所以我想出了一个两难的问题。在我的应用程序中,我有Persons
和Projects
,其中有一个属性。一个项目是由一些人完成的,每个项目都有一个协调员。
public class Person
{
private String firstName;
private String lastName;
private String mailAddress;
private String ID;
//more
}
我也有一名协调员:
public class Coordinator extends Person
{
private String type;
//more code
}
然后我有项目
public class Project
{
private String projectInfo;
private String nameOfProject;
private int projectID;
//more code
}
我的困境是这样的。我应该将所有对象存储到列表或HasMap,然后通过对象序列化存储到我的磁盘,还是应该创建XML表示(如下所示),然后使用DOM解析器读取我的XML?在XML方式中,每次我运行应用程序时,我都必须再次创建我的对象,对吧?与序列化相反,我将再次从磁盘读取我的对象。
<project>
<active></active>
<complete></complete>
<name></name>
<info></info>
<coordinator></coordinator>
<level1> //each project is distributed to different levels.
<cordinator> </cordinator>
<budget></budget>
<startDate></startDate>
<endDate></endDate>
<totalTasks> </totalTasks>
<complete></complete>
<task1>
<cordinator> </cordinator>
<personInvolved></personInvolved>
<personInvolved></personInvolved>
<personInvolved></personInvolved>
<personInvolved></personInvolved>
<budget></budget>
<startDate></startDate>
<endDate></endDate>
<complete></complete>
</task1>
<task2>
//same as task1
</task2>
</level1>
<level2>
//same as level1
</level2>
</project>
答案 0 :(得分:1)
使用Java或XML进行序列化之间的选择并不取决于您要将其序列化的位置。两者都可以保存到文件中。 Java序列化依赖于读取文件的每个进程都是Java程序的事实。 (除了Java程序之外,什么都不能读取该格式。)然而,XML是关于互操作性的。任何类型的程序都可以读取XML文件并通过某种库(JAXB或其他非Java XML序列化库)加载该数据。
随着类的改变,维护序列化Java对象的兼容性会很麻烦,但它并非不可克服。我不尝试。如果这是你的一个因素,你可能想要考虑XML,即使只有Java程序会读它。
所以问题是 - 谁需要阅读您正在撰写的数据,以及您最初编写数据的需求是什么?
答案 1 :(得分:0)
我认为最好的方法是序列化,你可以写下你想要的对象并轻松阅读它:
序列化人物p:
try {
FileOutputStream fileOut = new FileOutputStream("/tmp/your_filename.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(p);
out.close();
fileOut.close();
}
catch(IOException i) {
// error management
}
反序列化人员p:
try {
FileInputStream fileIn = new FileInputStream("/tmp/your_filename.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
p = (Person) in.readObject();
in.close();
fileIn.close();
}
catch(IOException i) {
// error management
}
catch(ClassNotFoundException c) {
// error management
}