Java Kryo-向后兼容性问题和严格的序列化/反序列化过程

当大型Java对象在多个客户端和一台普通服务器之间的HTTP请求中传递时,我们使用Kryo对其进行序列化。

例如,让我们序列化一个对象,如下所示:

class Person {

    private long id;
    private String name;

    public Person() {
    }
}

现在,我们有两个主要问题,这些问题引起很多麻烦和额外的编码:

  1. 当我们需要更改Person对象(例如,添加新字段)时-为了与仍使用 old Person对象的旧客户端保持向后兼容性-我们创建另一个Person类(v2.Person)。

    然后,我们使用旧的Person从旧客户端反序列化数据,并使用v2.Person从新客户端反序列化数据。这会创建很多代码重复。

  2. 例如,如果我将v2.Person对象移动到另一个程序包,则会引起如下问题:

    说我将班级从old_pacakge.v2.Person移到了new_package.v2.Person。当我尝试反序列化来自客户端的v2.Person对象时-得到ClassnotFoundException: old_pacakge.v2.Person

    要澄清-客户端使用服务器代码创建的依赖项jar中的Person对象。

    我知道这是因为在串行化上,kryo编写了类名,而在 deserialization 上,它尝试在类路径中找到该类并失败了(因为{ {1}}移动了。

    理想情况下-我希望能够序列化具有特定结构的类-并使用具有相同结构但不依赖于类位置的另一个类反序列化它。

我们无法解决这两个问题。我们已经阅读了很多有关Kryo以及人们如何处理向后兼容性问题的知识,但是发现很多人都有相同的问题,而找不到简单/标准的解决方案。

是否有解决这些问题的标准/最佳实践?

alv123456 回答:Java Kryo-向后兼容性问题和严格的序列化/反序列化过程

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2777534.html

大家都在问