首页 文章

在Java中,有没有一种方法可以使用除jdk序列化之外的类信息进行序列化?

提问于
浏览
0

我的系统中存在很多 Callback 个对象 . Callback 定义如下:

public interface Callback {
    void callback() throws Exception;
}

Callback cb = new Callback() {
    public void callback() {
        System.out.println("I'm here!");
    }
}

现在,我需要将这些 Callback 对象序列化为字节,以便它们可以存储在redis服务器中,并在以后获取以运行 callback() 方法 .

显然,Java中常用的序列化库(如Jackson)在这里不起作用 . 为了运行 callback() 代码,序列化字节必须包含类信息 . JDK序列化是一个选项:

public interface Callback extends java.io.Serializable {
    void callback() throws Exception;
}

Callback cb = new Callback() {
    private static final long serialVersionUID = 1L;
    public void callback() {
        System.out.println("I'm here!");
    }
}

但是,通过这种方式, Callback 的所有子类以及 callback() 方法引用的类都需要实现 java.io.Serializable 接口,这很难控制 .

所以,我想知道是否有另一种序列化方式不需要所有类型的限制?

1 回答

  • 4

    Java序列化不存储比Jackson更多的信息 . (除了Java序列化支持图形和Jackson支持树)不存储带有序列化数据的代码 .

    通常,尝试使用数据存储代码是个坏主意 . 代码可以是;

    • 详细(使用多KB或MB)

    • 难以准确确定序列化的数量 .

    • 与未来版本的代码不兼容 .

    • 非常难以有效地加载 . 例如序列化100万个对象,当你加载它们时,你不需要100万个同一个类的副本 .

    您应该确保您可能要序列化的所有内容都在数据中,而不是代码中 .

    序列化字节必须包含类信息

    这不是序列化的工作原理 . 通常假设所需的所有类都可用于反序列化数据的过程 .

    Callback的所有子类以及callback引用的类()

    当父级是Serializable时,它的所有子类也将是Serializable .

相关问题