如何从没有类文件的序列化Java对象中检索对象状态

时间:2013-08-12 02:39:56

标签: java xml serialization deserialization xstream

我有一个二进制文件,其中包含Java Serialized对象(它们是值对象),但我无法访问序列化以创建这些对象的Class。没有类文件,JVM不允许我使用objectInputStreamInstance.readObject()读取对象,并正确地抛出java.lang.ClassNotFoundException。

是否有可以帮助以XML或其他标准格式提取数据的库?例如,如果下面的Person类被序列化并存储在一个文件中,我想从中提取数据:

课程定义

class Person implements Serializable {
  int age;
  String name;
  public Person(int age, int name) {
    this.age = age;
    this.name = name;
  }
}

必需的提取格式(无法访问类文件)

<Person>
  <age>10</age>
  <name>Name</name>
</Person>

我还检查过以下内容,但没有得到我想要的内容:

  1. Xstream(http://x-stream.github.io/)需要访问Java对象才能从该对象创建XML。但是,我无法为缺少类文件创建对象。
  2. 血清透析似乎很老https://weblogs.java.net/blog/emcmanus/archive/2007/06/disassembling_s.html
  3. 感谢您的帮助。

    此致 Gursev

1 个答案:

答案 0 :(得分:5)

检查jdeserialize。它有一个命令行模式,但也有a reasonably well documented API。关于自动重新序列化为XML?我不这么认为。这样做的方式太多了。您可能需要通过两个单独的步骤来完成此操作。 jdeserialize可以帮助对类进行逆向工程(生成源代码java代码),尤其是当许多XML序列化工具需要这样做时。

现在,如果原始类没有使用默认的序列化机制(通过覆盖readObject或类似物)或者使用数据混淆/加密技术(比如在javax.crypto.SealedObject和/或{{中包装对象1}}),那么你成功的机会越来越少。