我的系统中存在很多 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 回答
Java序列化不存储比Jackson更多的信息 . (除了Java序列化支持图形和Jackson支持树)不存储带有序列化数据的代码 .
通常,尝试使用数据存储代码是个坏主意 . 代码可以是;
详细(使用多KB或MB)
难以准确确定序列化的数量 .
与未来版本的代码不兼容 .
非常难以有效地加载 . 例如序列化100万个对象,当你加载它们时,你不需要100万个同一个类的副本 .
您应该确保您可能要序列化的所有内容都在数据中,而不是代码中 .
这不是序列化的工作原理 . 通常假设所需的所有类都可用于反序列化数据的过程 .
当父级是Serializable时,它的所有子类也将是Serializable .