【发布时间】:2019-07-31 16:11:38
【问题描述】:
我有两个交互的类:
搁板,用于存放 CD、DVD、PaperMedias:
public class Shelf {
private ArrayList<CD> cds;
private ArrayList<DVD> dvds;
private ArrayList<PaperMedia> paperMedias;
...etc
和客户:
public class Customer implements Serializable {
private Map<PhysicalMedia, Calendar> mediaOwned;
private Map<PhysicalMedia,Calendar> mediaReturned;
private Map<PhysicalMedia,CalendarPeriod> mediaOnHold;
...etc
物理媒体是 CD、DVD、PaperMedia 的父级。
首先,我将用一些物品初始化货架,并让客户借用其中的一些物品。然后我将这些对象保存到 ShelfObjects.txt 和 CustomerObjects.txt。
当我再次从这些文件中读取这些对象时,似乎这两者之间的链接丢失了,特别是客户的 PhysicalMedia 和货架的 PhysicalMedia 之间。这些绝对应该具有相同的引用,例如 Metallica CD 在货架上的引用应该与客户帐户中的引用相同。
所以当我更改 Metallica CD 的状态时,它不会在其他来源中更新它!
是否有保留此引用的方法?
我在 CustomerDatabase 类中通过以下方式加载和保存媒体:
public class CustomersDatabase implements Serializable {
private ArrayList<Customer> customers = new ArrayList<Customer>();
//etc..
public void load() {
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream("CustomersObject.txt"));
try {
customers.clear();
while(true) {
customers.add((Customer)in.readObject());
}
} catch (ClassNotFoundException e) {
System.out.println("Customer class in file wasn't found");
}
in.close();
} catch (FileNotFoundException e) {
System.out.println("File not found");
e.printStackTrace();
} catch (IOException e) {
System.out.println("\n^ Customer load successful\n");
}
public void save() {
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("CustomersObject.txt",false));
for (int i=0;i<customers.size();i++) {
out.writeObject(customers.get(i));
}
out.close();
System.out.println("\nCustomer save successful\n");
} catch (FileNotFoundException e) {
System.out.println("File not found");
e.printStackTrace();
} catch (IOException e) {
System.out.println("IO exception ");
e.printStackTrace();
}
}
我在 Shelf 类中进行类似的加载和存储。
【问题讨论】:
-
添加用于保存和读取文件数据的方法。
-
标题中的松散是错字,应该是丢失的。
-
我添加了加载和存储这些文件的方式
-
如果您将
Shelf对象和Customer对象序列化到文件中,它将起作用。反序列化创建了一组全新的对象。注意您不需要单独序列化列表的元素。你可以序列化列表。并且序列化数据不是文本,不应该保存在扩展名为 .txt 的文件中。 -
所以你应该把它实现
Serializable,这样你可以将它序列化到文件中。
标签: java io stream objectinputstream objectoutputstream