java - 使用 Ehcache 自定义序列化

标签 java serialization ehcache

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

最佳答案

我通过使用包装器并添加另一个抽象层(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了解更多信息对我帮助很大。

关于java - 使用 Ehcache 自定义序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17431500/

相关文章:

java - JComboBox弹出动态人口

java - HHH90001006 : Missing cache[default-update-timestamps-region] was created on-the-fly

java - Spring 3项目中的Hibernate基础配置-找不到类异常

Java- JTextPane 中的 "Circular"选择?

基于 C++ STL 的二进制序列化数据发送,使用套接字进行网络传输,无需使用库

serialization - 序列化动态 ax 365 数据契约扩展

Java EHCache 3 监听器和元空间问题

java - EhCache Spring优化

java - (70007)指定的超时已过期 : proxy: error reading status line from remote server

java - 使用 Jackson 从 JSON 映射 BasicNameValuePair