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

在concreate中,我需要序列化在接口中定义的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注册接口进行序列化吗?

谢谢

最佳答案

使用addDefaultSerializer方法:

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

关于java - 如何通过接口(interface)使用Kryo序列化/反序列化对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21076136/

10-11 00:13