2

我正在尝试将基于字符串的协议替换为使用 protobuf 的协议。我使用以下命令序列化移动命令:

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[] 数组,但是如何确定 byte[] 数组中的对象的类型?(是 HitCommand 还是 MoveCommand?)

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

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

我怀疑我错过了一些重要的东西。

4

1 回答 1

2

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

于 2015-10-23T14:02:50.130 回答