java - XStream 不会调用 readObject()

标签 java serialization deserialization xstream

我有这样建模的代码:

class A {
    private transient Foo foo = new Foo();
    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
        in.defaultReadObject();
        foo = new Foo();
    }
}

class B extends A {}

我将 readObject() 添加到 A 中,以便在反序列化期间, transient foo 将被初始化。但是,我在代码中设置了断点,可以看到 XStream 根本没有调用 readObject()。我还尝试将 readObject() 放在 B 类中,该 B 类调用 A 中的 initFoo() 函数,但这也不起作用。

网站上的常见问题解答似乎并不意味着需要任何其他样板文件才能正常工作。为什么没有被调用?

最佳答案

XStream 文档似乎不正确,或者至少具有误导性。它在 http://x-stream.github.io/faq.html#Serialization_initialize_transient 中说,

Use the latter [readObject] in class hierarchies, readResolve is not called for base classes.

但是,在我在问题中列出的代码中用 readResolve() 替换 readObject() ,它似乎被调用并且 foo 正在正确初始化。但这很令人困惑,因为根据 XStream 和 java.io.Serialized 的文档, readObject() 似乎就是我所需要的。

但是方法内的断点仍然没有被命中。这可能与这些可序列化方法的调用方式有关。

关于java - XStream 不会调用 readObject(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15752945/

相关文章:

java - 将(WAV)写入文件只能说一个字(最后一个字)

c++ - 将 uint8 数组反序列化为 int64 失败但应该可以

java - JsonMappingException : Can not find a deserializer for non-concrete Map type

serialization - Google Protocol Buffers 中 bool 占用的空间是多少?

c# - 使用 Json.net 将非数组 JSON 对象解析为数组

java - 如何修复此 VarArgs 构建错误?

java - Maven目录结构

java - 从 HttpClient 更新到 HttpURLConnection

wpf - 如何将 System.Windows.Media.Color 对象序列化为 sRGB 字符串?

java - 如何在 PHP 中反序列化在 Java 中序列化的对象