如何确定正确的串行版本ID?

时间:2009-06-12 09:21:25

标签: java serialization

如何确定正确的序列版本ID?它应该是使用某些生成器或任何整数的任何大的长值吗?

5 个答案:

答案 0 :(得分:5)

坦率地说,只要serialVersionUID在你班级的不同版本之间有所不同,那就非常重要。

如果同一个类的两个版本具有不同的可序列化字段具有相同的serialVersionUID,则会有什么不好 - 这可能会导致执行序列化时出现问题。

此外,如果对类的更改不会影响序列化(例如,类中的可序列化字段保持不变),则serialVersionUID可以保持不变。

像Eclipse这样的IDE将根据字段和有关类的其他信息自动为实现Serializable的类生成ID,因此这可能是生成唯一ID的最简单路径。

有关该主题的进一步阅读,Discover the secrets of the Java Serialization API将是一个很好的阅读。有一个名为“版本控制”的部分讨论了serialVersionUID问题。

答案 1 :(得分:2)

可能的用途:

  • version - 当类以不兼容的方式更改时递增它;
  • timestamp - 将其设置为当前时间戳 - 例如当类以不兼容的方式更改时200906121213

答案 2 :(得分:1)

serialver工具附带Sun的Java开发工具包(JDK)。它在命令行上使用完整的类名并返回该编译类的串行版本ID,或者可以使用“-show”参数运行以启动小型交互式GUI。

因此,如果您的班级是Foo,请运行

serialver Foo

你会得到这样的输出:

Foo:static final long serialVersionUID = -6618469841127325812L;

以“static”开头的代码,并将其与其他静态变量一起放在您的类中。现在,串行版本ID已锁定在类中。

答案 3 :(得分:1)

启动命令提示符

键入以下内容:

cd \

然后在

下面输入

[serialver] [space] -classpath [space] [类文件的路径] [space] [类文件名]

e.g。

serialver -classpath C:\ Users \ nileshjadav \ Documents \ java \ file_io ByteStreamDemo

请不要添加简单地使用ByteStreamDemo.java或ByteStreamDemo.class这样的扩展名,只需使用ByteStreamDemo

答案 4 :(得分:-1)

在使用java serialver实用程序生成serialVersionUID之前,需要注意几件事。

  1. JDK路径,直到在环境变量中设置bin。另外,你可能会得到“'serialver'不被认为是内部或外部命令”。

  2. 添加类文件所在的类路径,或者转到类文件所在的目录。

  3. 运行serialver ..这将为您提供SerialID。

  4. 传递给此实用程序的类名称不包括.class扩展名。