java - 如何保存和加载包含另一个类列表的类?
问题描述
我有一个包含 Treasure 类列表的类 Inventory。我设计了 Reader 以将 Inventory 读取为 Treasure 列表,但是当我想从我的 main 函数中调用 reader 时,它说 Inventory 与 Treasure 列表不同。现在我不知道该怎么办,是否应该将读取方法更改为仅读取 Inventory,但是 Inventory 再次包含我需要的所有 Treasure 列表。我很不知道该怎么做。
public class Inventory implements SavedGames {
private ArrayList<Treasure> inventory;
private static Inventory instance;
// EFFECTS: constructs an empty player inventory
private Inventory() {
this.inventory = new ArrayList<Treasure>();
inventory.add(new Treasure("Potion", 4));
}
private void loadGames() {
try {
MainCharacter character = Reader.readCharacter(new File(CHARACTER_FILE));
Monster monster = Reader.readMonster(new File(MONSTER_FILE));
List<Treasure> inventory = Reader.readInventory(new File(INVENTORY_FILE));
this.character = character;
this.monster = monster;
this.inventory = inventory;
} catch (IOException e) {
System.out.println("Unable to read files, resetting...");
startApp();
}
}
private static List<Treasure> parseInventory(List<String> fileContent) {
List<Treasure> inventory = new ArrayList<>();
for (String line : fileContent) {
ArrayList<String> lineComponents = splitString(line);
inventory.add(parseTreasure(lineComponents));
}
return inventory;
}
private static Treasure parseTreasure(List<String> components) {
String description = components.get(0);
int amount = Integer.parseInt(components.get(1));
return new Treasure(description, amount);
}
}
解决方案
序列化是一种将对象的状态转换为字节流的机制。反序列化是使用字节流在内存中重新创建实际 Java 对象的逆过程。该机制用于持久化对象。创建的字节流与平台无关。因此,在一个平台上序列化的对象可以在不同平台上反序列化。
为了使 Java 对象可序列化,我们实现了 java.io.Serializable 接口。ObjectOutputStream 类包含用于序列化对象的 writeObject() 方法。
public final void writeObject(Object obj)
throws IOException
ObjectInputStream 类包含用于反序列化对象的 readObject() 方法。
public final Object readObject()
throws IOException,
ClassNotFoundException
推荐阅读
- angular - Angular 9 - 无法实例化循环依赖
- typescript - 如何更改克隆对象中的属性,并且原始对象中的所有属性都没有更改
- c# - 没有 GL.Begin() 的 OpenTK 文本渲染
- php - 从 PC 发送 SMS 消息,就像通过电话发送它们一样
- azure - azure Release 将单个文件复制到 wwwroot 文件夹
- xml - 为 FedEx Web 服务创建 HTTP Post Call
- c# - ASP.NET Core:向所有页面添加背景图像
- python - Pandas:有没有办法检查一个对象是否真的是一个字符串来使用 .str 访问器而不会遇到 AttributeError?
- python - 我想知道为什么它说距离必须小于 27?为什么少于27?27从哪里来?
- javascript - MaterialTextfield 的 Typescript 类型