动态架构&使用Protostuff进行反序列化

时间:2015-10-15 16:56:26

标签: serialization deserialization protostuff

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

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

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

1 个答案:

答案 0 :(得分: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的类。