serialver 是 Java 提供的一个命令行工具,用于生成给定 Java 类的序列化版本 ID(serialVersionUID)。这个 ID 用于在序列化对象时确保类的版本兼容性。当类的定义在序列化对象之后发生变化时,如果 serialVersionUID 没有相应地更新,那么尝试反序列化该对象将会失败,并抛出一个 InvalidClassException。
serialver [-classpath 类路径] [-show] [类名称...]
注意,上面的 “类名称”不是“源代码文件,如:Test.java”而是字节码文件名称,如:Test,不要后缀 .class。
在演示命令用法之前,准备一个类,代码如下:
import java.io.Serializable; /** * 序列化 Serializable * @author hxstrive.com */ public class SerialverDemo implements Serializable { private static final long serialVersionUID = 1L; }
编译上面 SerialverDemo 类,生成 SerialverDemo.class 字节码,将字节码文件拷贝到 D:\share_dir\ShareDoc 目录,然后执行下面命令。
(1)获取类的 serialVersionUID,例如:
D:\share_dir\ShareDoc> serialver.exe SerialverDemo SerialverDemo: private static final long serialVersionUID = 1L;
上面示例返回 SerialverDemo 类的 serialVersionUID。
注意:可以通过这个命令获取类的 serialVersionUID,并在序列化和反序列化过程中使用它来验证类的版本一致性。
(2)通过“-classpath”指定类路径,假如 SerialverDemo 位于“D:\$demo_workspace\demo_java\demo_demo\target\classes”目录,例如:
D:\share_dir\ShareDoc> serialver.exe -classpath D:\$demo_workspace\demo_java\demo_demo\target\classes SerialverDemo SerialverDemo: private static final long serialVersionUID = 1L;
注意:上面示例将在指定的类路径(D:\$demo_workspace\demo_java\demo_demo\target\classes)中查找指定类(SerialverDemo),并返回该类的 serialVersionUID。