Java1L的SerialVersionUid可以吗?还是必须是独一无二的?
Is Java SerialVersionUid of 1L ok? Or does it need to be unique?
我有两个 java class 实现序列化。我将它们都设置为具有 1L 的 serialVersionUid。
一位同事说,所有 classes 必须具有唯一的序列版本 uid,如果它们具有相同的序列版本 uid,jvm 会将 classes 视为相同。我认为相等性是基于 equals 方法的结果而不是串行版本 uid。
据我了解,串行版本 uid 用于指示 class 的版本,当 class 以不兼容的方式更改时,串行版本 uid 应该递增。
对吗?使用 1 的 serialversion uid 可以吗?或者 java classes 永远不会有 1L 的 serialversion uid?
class 名称是对象序列化表示的一部分。 serialVersionUID 仅用于对 classes 进行版本控制。所以 1L 是一个有效值。
注意,如果你不打算在演化class的同时保持序列化的兼容性,serialVersionUID是没有用的,可以省略。当您想要对 class 进行兼容更改并且仍然能够读取使用旧版本 class 序列化的对象(反之亦然)时,拥有 serialVersionUID 非常有用。但这需要格外小心,而且绝非易事。您通常应该避免使用序列化进行长期存储。如果用于网络目的,对客户端和服务器使用完全相同的 classes(即同时部署两者)是最简单的策略。
另请注意,您可以通过简单地序列化和反序列化具有与 serialVersionUID 相同的值 (1L) 的两个不同 classes 的两个对象来轻松证明您的同事是错误的。如果他的理论是正确的,JVM 将无法知道如何反序列化对象。
我有两个 java class 实现序列化。我将它们都设置为具有 1L 的 serialVersionUid。
一位同事说,所有 classes 必须具有唯一的序列版本 uid,如果它们具有相同的序列版本 uid,jvm 会将 classes 视为相同。我认为相等性是基于 equals 方法的结果而不是串行版本 uid。
据我了解,串行版本 uid 用于指示 class 的版本,当 class 以不兼容的方式更改时,串行版本 uid 应该递增。
对吗?使用 1 的 serialversion uid 可以吗?或者 java classes 永远不会有 1L 的 serialversion uid?
class 名称是对象序列化表示的一部分。 serialVersionUID 仅用于对 classes 进行版本控制。所以 1L 是一个有效值。
注意,如果你不打算在演化class的同时保持序列化的兼容性,serialVersionUID是没有用的,可以省略。当您想要对 class 进行兼容更改并且仍然能够读取使用旧版本 class 序列化的对象(反之亦然)时,拥有 serialVersionUID 非常有用。但这需要格外小心,而且绝非易事。您通常应该避免使用序列化进行长期存储。如果用于网络目的,对客户端和服务器使用完全相同的 classes(即同时部署两者)是最简单的策略。
另请注意,您可以通过简单地序列化和反序列化具有与 serialVersionUID 相同的值 (1L) 的两个不同 classes 的两个对象来轻松证明您的同事是错误的。如果他的理论是正确的,JVM 将无法知道如何反序列化对象。