JDK自带servialver工具使用

JDK自带servialver工具使用


对于实现了serializable接口的类,可以被java序列化和反序列化,序列化操作时用来判断该类是否有变化的标志就是serialVersionUIDserialVersionUID可以说是类的版本号,如果反序列化操作时,类的serialVersionUID版本号与序列化时不同,则会抛出SerializationFailedException 异常,同时显示出两次serialVersionUID的具体信息,所以 serialVersionUID 在序列化中是极为重要的信息

serialver命令是JDK提供的用来查看类serialVersionUID的工具,命令如下:

serialver [-classpath classpath] [-show] [classname...]

-classpath 参数项是用指类路径,当要查找的类在jar包中,类路径是指jar包的相对路径或者绝对路径,当要查找的类.class在系统的某个文件路径下时,类路径是指.class文件包名的开始位置的相对路径或者绝对路径

jar包方式

jar包物理路径:/Users/xiao/Documents/study/test.jar,需要显示serialVersionUID的类com.test.BaseEntity

当前目录:/Users/xiao/Documents,命令如下

serialver -classpath ./study/test.jar com.test.BaseEntity
serialver -classpath /Users/xiao/Documents/study/test.jar com.test.BaseEntity
文件目录方式

类路径:/Users/xiao/Documents/study/com/test/BaseEntity.class

  1. 当前目录:/Users/xiao/Documents,命令如下:

    serialver -classpath ./study com.test.BaseEntity
    serialver -classpath /Users/xiao/Documents/study com.test.BaseEntity
  2. 当前目录:/Users/xiao/Documents/study,命令如下:

    serialver -classpath ./ com.test.BaseEntity
    serialver -classpath com.test.BaseEntity
    serialver -classpath /Users/xiao/Documents/study com.test.BaseEntity
  3. 当前目录:/Users/xiao/Documents/study/com/test,命令如下:

    serialver -classpath ../../ com.test.BaseEntity
    serialver -classpath /Users/xiao/Documents/study com.test.BaseEntity

如果直接跑到类的直接目录(/Users/xiao/Documents/study/com/test/)下,classpath 不正确虽然能找到对应的类,但是会抛出,执行如下命令:

serialver com.test.BaseEntity

结果如下:

找不到类BaseEntity

执行如下命令:

serialver BaseEntity

结果如下:

Exception in thread "main" java.lang.NoClassDefFoundError: BaseEntity (wrong name: com/test/BaseEntity)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at sun.tools.serialver.SerialVer.resolveClass(SerialVer.java:211)
    at sun.tools.serialver.SerialVer.serialSyntax(SerialVer.java:183)
    at sun.tools.serialver.SerialVer.main(SerialVer.java:297)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值