1

我正在使用 Protostuff 尝试序列化/反序列化几种不同类型的对象,这些对象没有可用的 protobuf 源(这是服务器-服务器 RPC 场景)。序列化没问题,因为我知道要序列化的对象的类型并且可以创建模式:

Schema schema = RuntimeSchema.getSchema(object.getClass());

现在,我使用ProtobufIOUtil.toByteArray并获取一个字节数组,然后将其传递给远程服务器。但是,我似乎无法在远程服务器中反序列化这个字节数组,因为我无法为“未知”类型的对象创建模式。有什么办法可以克服这个问题并以与使用 Java 的本机序列化相同的方式使用 Protostuff?

4

1 回答 1

1

很少有具有共同想法的解决方案 - 将类的名称与数据一起序列化。

第一个需要protostuff-runtime. 您应该使用一个类型的字段创建包装类Object

public class Wrapper {
    public Object data;
}

然后将对象放入data字段并序列化包装器,protostuff-runtime将类名自动附加到序列化表单中,然后将其用于反序列化。

如果你想要更多的控制,那么你可以在没有protistuff-runtime.

首先,您需要一个包装类:

public class Wrapper {
    public String clazz;
    public byte[] data;
}

然后您应该将数据序列化为字节数组,将其存储到包装器,然后序列化包装器实例。

在远程,您Wrapper首先反序列化,然后获取clazz字段 -​​ 这是您应该用来反序列化的类data

于 2015-11-02T22:29:14.983 回答