首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >查找序列化对象的serialVersionUID

查找序列化对象的serialVersionUID
EN

Stack Overflow用户
提问于 2009-08-24 12:12:11
回答 8查看 20K关注 0票数 21

有没有办法确定序列化的Java对象生成的serialVersionUID

问题是我在没有明确指定serialVersionUID的情况下序列化了对象。现在,反序列化过程抱怨类不兼容。然而,我没有以一种会使其不兼容的方式更改类。因此,我假设在类中指定serialVersionUID就足够了,因为它存储在对象数据中。为此,我需要从序列化数据中读取serialVersionUID

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-08-24 12:46:58

您可以通过扩展ObjectInputStream来完成此操作

代码语言:javascript
复制
public class PrintUIDs extends ObjectInputStream {

  public PrintUIDs(InputStream in) throws IOException {
    super(in);
  }

  @Override
  protected ObjectStreamClass readClassDescriptor() throws IOException,
      ClassNotFoundException {
    ObjectStreamClass descriptor = super.readClassDescriptor();
    System.out.println("name=" + descriptor.getName());
    System.out.println("serialVersionUID=" + descriptor.getSerialVersionUID());
    return descriptor;
  }

  public static void main(String[] args) throws IOException,
      ClassNotFoundException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(baos);
    List<Object> list = Arrays.asList((Object) new Date(), UUID.randomUUID());
    oos.writeObject(list);
    oos.close();
    InputStream in = new ByteArrayInputStream(baos.toByteArray());
    ObjectInputStream ois = new PrintUIDs(in);
    ois.readObject();
  }

}

我相信可以通过替换该方法返回的描述符来读取所有序列化的数据,但我还没有尝试过。

票数 12
EN

Stack Overflow用户

发布于 2014-11-09 06:15:18

这对我来说很有效:

代码语言:javascript
复制
long serialVersionUID = ObjectStreamClass.lookup(YourObject.getClass()).getSerialVersionUID();

希望这对你也有帮助。

票数 27
EN

Stack Overflow用户

发布于 2009-08-24 13:14:36

有一个简单的方法来找出一个类的serialversionUID -

假设你有一个类,在这个类中你忘记提到serialversionUID-

代码语言:javascript
复制
import java.io.Serializable;

public class TestSerializable implements Serializable {

}

就这么做吧-

代码语言:javascript
复制
serialver -classpath . TestSerializable

这个打印出来-

代码语言:javascript
复制
static final long serialVersionUID = 5832063776451490808L;

serialver是JDK附带的一个实用程序

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1321988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档