2015-10-15 104 views
1

我使用Protostuff试图序列化/反序列化几种不同类型的对象,但没有protobuf源可用(它是服务器 - 服务器RPC场景)。序列化去OK,因为我知道对象的序列化的类型,并且可以创建模式:使用Protostuff的动态模式和反序列化

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

现在,我使用ProtobufIOUtil.toByteArray,并得到一个字节数组,然后我传递到远程服务器。但是,我似乎无法反序列化远程服务器中的字节数组,因为我无法为“未知”类型的对象创建模式。有没有什么办法可以通过这种方式来使用Protostuff,就像我使用Java的本地序列化一样?

回答

0

有一些共同点的解决方案 - 将类的名称与数据一起序列化。

第一个需要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的类。