【问题标题】:Custom serialization with Ehcache使用 Ehcache 自定义序列化
【发布时间】:2013-07-02 16:59:25
【问题描述】:

在将对象从内存移动到磁盘或堆外缓存以及其他方式时,是否可以告诉 Ehcache 使用自定义序列化?我想从序列化中跳过一些未声明为瞬态(第三方库)但我不需要存储的字段,因为我可以轻松地重新计算它们。我想这样做以节省相当多的内存。充其量,我想使用像 Kryo 这样的库。

【问题讨论】:

    标签: java serialization ehcache


    【解决方案1】:

    我通过使用包装器并添加另一个抽象层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;
      }
    }
    

    序列化方法readObjectwriteObject 将被称为by the Java contract 并允许我实现自定义序列化。此外,此解决方案不会产生大小开销,因为我只将包装的对象写入输出流并完全跳过包装器的写入。您也可以read this documentation 了解对我有很大帮助的更多信息。

    【讨论】:

    • 输出/输入导入在哪里?
    • 它们在com.esotericsoftware.kryo.io包中定义
    猜你喜欢
    • 2011-03-10
    • 2010-12-31
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    相关资源
    最近更新 更多