传输 Java 序列化对象



是否可以在一个Java程序/类中声明可序列化对象的实例,然后在另一个程序/类中完全重复内部对象的定义,并从数据文件中加载大型复杂对象?目标是能够为保存在我的构建机器上的本地项目编写编辑器,然后编写游戏本身并将其分发给想要玩游戏的人。

我正在用Java编写一个游戏,作为一个业余爱好者项目。在我的游戏中,有一个类系列扩展了父类 GameItem。物品可能属于不同的家族,如治疗药水、炸弹、钥匙物品等。

class GameItem implements Serializable {
String ItemName
String ImageResourceLocation
....}

我想做的是包括如何在特定的项目系列中创建每个项目的定义,但随后有一个名为 GameItemList 的大类,其中包含您在玩游戏时可能发生的所有项目。

class GameItemList implements Serializable {
LinkedList<GameItem>gameItemList;
//methods here like LookUpByName, LookUpByIndex that return references to an item
}

也许在某个时候 - 当玩家开始新游戏时,或者随着游戏启动,执行以下操作:

//create itemList
FileInputStream fileIn = new FileInputStream("items.dat");
ObjectInputStream in = new ObjectInputStream(fileIn);
GameItemList allItems = (GameItemList)in.readObject();
in.close();
//Now I have an object called allItems that can be used for lookups.

谢谢大家,任何意见或帮助将不胜感激。

序列化对象时,对象的每个字段都会被序列化,除非标有 transient 。这种行为当然是递归的。所以是的,你可以序列化一个对象,然后反序列化它,反序列化的对象将与序列化的对象具有相同的状态。不同的行为将使序列化无用。

不过,我不会将本机序列化用于长期存储数据。序列化对象很难检查,无法使用文本编辑器进行修改,并且很难保持与旧版本的类的向后兼容性。我会使用更开放的格式,如XML或JSON。

是的,这是可能的。如果对象已正确序列化,则只要运行该对象的应用程序知道要反序列化的类的定义,就可以在任何其他计算机上对其进行反序列化。

这将起作用,但Java序列化因难以"发展"类而臭名昭著 - 内部表示明确绑定到磁盘格式。 您可以使用自定义读取器/编写器方法解决此问题,但可以考虑使用更可移植的格式(如 JSON 或 XML)而不是对象序列化。

最新更新