【问题标题】:How serialise/de-serialise an object with Kryo by using an interface如何通过使用接口使用 Kryo 序列化/反序列化对象
【发布时间】:2014-01-31 07:18:21
【问题描述】:

是否可以通过注册接口而不是创建类来使用 Kryo 序列化/反序列化对象?

在创建过程中,我需要序列化一个 Java 7 Path 对象,该对象在接口中定义。

我尝试编写一个将路径 URI 保存为字符串并在读取反序列化期间重新创建它的序列化程序。但事实证明我的序列化编写器方法从未被 Kryo 调用过。

这是我的(Groovy)代码:

class PathSerializer extends FieldSerializer<Path> {

    PathSerializer(Kryo kryo) {
        super(kryo, Path)
    }

    public void write (Kryo kryo, Output output, Path path) {
        def uri = path.toUri().toString()
        kryo.writeObject(output, uri)
    }

    public Path read (Kryo kryo, Input input, Class<Path> type) {
        def uri = kryo.readObject(input,String)
        Paths.get(new URI(uri))
    }
}

def kryo = new Kryo()
kryo.register(Path, new PathSerializer(kryo))

def path = Paths.get('hola')
Output output = new Output(new FileOutputStream("file.bin"));
kryo.writeObject(output, path);
output.close();

知道如何使用 Kryo 注册用于序列化的接口吗?

谢谢

【问题讨论】:

    标签: java serialization kryo


    【解决方案1】:

    使用addDefaultSerializer 方法:

    kryo.addDefaultSerializer(Path, new PathSerializer(kryo))
    

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 2023-03-07
      • 1970-01-01
      相关资源
      最近更新 更多