byte []中的对象类型用模式反序列化?

时间:2015-10-23 13:45:03

标签: java protocol-buffers protostuff

我试图用基于字符串的协议替换使用protobuf的协议。我使用以下命令序列化move命令:

Schema<MoveCommand> schema = RuntimeSchema.getSchema(MoveCommand.class);
ProtostuffIOUtil.toByteArray(this, schema, buffer)

我的点击命令:

Schema<Hitcommand> schema = RuntimeSchema.getSchema(Hitcommand.class);
ProtostuffIOUtil.toByteArray(this, schema, buffer)

这没有问题。当我序列化结果是一个byte []时,这个数据通过socket发送到socketocket。

在服务器端,我读出了byte []数组,但是如何确定byte []数组中对象的类型? (是和HitCommand还是MoveCommand?)

我问这个是因为要反序列化我需要一个Schema,当我知道byte []数组中对象的类时,我只能创建/获取模式。

使用我的旧字符串协议,我只是在字符串的开头有消息的类型。

我怀疑我错过了至关重要的事情。

1 个答案:

答案 0 :(得分:2)

消息的类型不是序列化数据的一部分。如果您没有其他方法来指定它,那么您可以创建另一个包含Hitcommand或MoveCommand的消息(可能称为Envelope)。然后,您可以始终反序列化信封,并查看是否定义了Hitcommand或MoveCommand。