在将对象从内存移动到磁盘或堆外缓存以及其他方式时,是否可以告诉 Ehcache 使用自定义序列化?我想从序列化中跳过一些未声明为瞬态(第三方库)但我不需要存储的字段,因为我可以轻松地重新计算它们。我想这样做以节省相当多的内存。充其量,我想使用像 Kryo 这样的库。
问问题
3041 次
1 回答
3
我通过使用包装器并添加另一个抽象层(a SerializationWrapper
. 这里介绍的包装器使用 Kryo:
final class SerializationWrapper implements Serializable {
private final static Kryo KRYO = new Kryo();
private Object object;
public SerializationWrapper(Object object) {
this.object = object;
}
private void readObject(ObjectInputStream objectInputStream)
throws IOException, ClassNotFoundException {
Input input = new Input(objectInputStream);
object = KRYO.readClassAndObject(input);
input.close();
}
private void writeObject(ObjectOutputStream objectOutputStream)
throws IOException {
Output output = new Output(objectOutputStream);
KRYO.writeClassAndObject(output, object);
output.close();
}
public Object getWrappedObject() {
return object;
}
}
序列化方法将由Java 合约readObject
调用,并允许我实现自定义序列化。此外,此解决方案不会产生大小开销,因为我只将包装的对象写入输出流并完全跳过包装器的写入。您还可以阅读此文档以了解对我有很大帮助的更多信息。writeObject
于 2013-07-09T13:38:36.423 回答