因此,假设我在Java中有一个类,它存储数据,我将一个对象序列化并将其保存到文件中。我有另一个完全相同类的项目,但它仍然在另一个文件中定义。我是否能够获取我保存的文件并在该项目中反序列化它是否有效?
答案 0 :(得分:0)
我认为只要班级名称和serialVersionUID
相同,这就行了。
答案 1 :(得分:0)
是的,这可行,假设各个项目对于相关课程具有相同(或兼容)的“.class”文件。
序列化然后反序列化对象实质上会创建它的副本。序列化然后反序列化时不保留对象标识。保留的是对象的状态以及与序列化中其他对象的关系。
与此对比:
正交持久性 - 系统确保只有一个对象,
对象关系映射 - 可能存在多个内存中副本,但系统可以将它们与存储在数据库中的“主”副本同步。
答案 2 :(得分:0)
这就是序列化的目的。它允许您将对象从一个Java应用程序传递到另一个在不同JVM和不同计算机上工作的Java应用程序。它可以通过文件或网络或数据库来完成。
答案 3 :(得分:-1)
如果指定serialVersionUID,那就可以。
UPD:流唯一标识符是类名,接口类名,方法和字段的64位哈希值。
因此,如果您的类实现不同的接口,您应该遇到问题。为可序列化类指定serialVersionUID的任何方式都是一种很好的做法。
注 - 强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类细节高度敏感,这些细节可能因编译器实现而异,因此在反序列化期间可能导致意外的serialVersionUID冲突,从而导致反序列化失败。
答案 4 :(得分:-1)
我有另一个具有完全相同类的项目,但它仍然在另一个文件中定义。
换句话说,它几乎可以肯定是一个不同的类,除非声明源代码在同一个包中,在这种情况下将它分成两个或多个单独的零点是没有意义的文件首先。两个不同包中的类似源代码不是同一个类,它是两个不同的类,一个不能反序列化。