Java序列化对象的传输

Java序列化对象的传输,java,serialization,data-structures,software-distribution,Java,Serialization,Data Structures,Software Distribution,是否可以在一个Java程序/类中声明一个可序列化对象的实例,然后在另一个程序/类中完全重复内部对象的定义,并从数据文件加载一个大型复杂对象?目标是能够为本地保存在构建机器上的项目编写编辑器,然后编写游戏本身并将其分发给想要玩游戏的人 class GameItemList implements Serializable { LinkedList<GameItem>gameItemList; //methods here like LookUpByName, LookUpByIndex

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

class GameItemList implements Serializable {
LinkedList<GameItem>gameItemList;
//methods here like LookUpByName, LookUpByIndex that return references to an item
}
作为一个爱好者项目,我正在用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
}

谢谢各位,如果您能提供任何意见或帮助,我们将不胜感激。

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


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

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


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

是的,这是可能的。如果一个对象被正确序列化,只要运行在那里的应用程序知道要反序列化的类的定义,它就可以在任何其他机器中反序列化。

是的,这是可能的。如果一个对象被正确序列化,只要运行在那里的应用程序知道要反序列化的类的定义,它就可以在任何其他机器上反序列化。

这会起作用,但Java序列化因难以“进化”类而臭名昭著——内部表示明确地绑定到磁盘格式。您可以使用自定义读写器方法来解决此问题,但是您可能会考虑像JSON或XML这样的更便携的格式,而不是对象序列化。

< P>这是可行的,但是java序列化由于难以“演化”类而臭名昭著,内部表示明确地绑定到ON磁盘格式。您可以使用自定义读写器方法来处理这个问题,但是您可能会考虑像JSON或XML这样的更便携的格式,而不是对象序列化。

也许您会对远程方法调用(RMI)感兴趣。也许您会对远程方法调用(RMI)感兴趣。。内部表示与磁盘格式没有明确的联系。磁盘格式有自己的单独规范,广义上讲,它由可序列化成员的类型标记和名称-值对的每个对象组成。它序列化所有私有字段,除非您编写自定义读写器。这不正是内部表示吗?它以单独规范定义的格式序列化所有非静态非瞬态字段。您可以插入、删除或重新排序字段,而不会破坏与预序列化对象的兼容性。您不能将其描述为“明确绑定到内部表示”。NB private与此无关。内部表示与磁盘格式无关。磁盘格式有自己的单独规范,广义上讲,它由可序列化成员的类型标记和名称-值对的每个对象组成。它序列化所有私有字段,除非您编写自定义读写器。这不正是内部表示吗?它以单独规范定义的格式序列化所有非静态非瞬态字段。您可以插入、删除或重新排序字段,而不会破坏与预序列化对象的兼容性。您不能将其描述为“明确绑定到内部表示”。NB private与此无关。