我正在尝试用使用 protobuf 的协议(protocol)替换基于字符串的协议(protocol)。我用以下命令序列化移动命令:
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[] 数组内的对象的类时,我才能创建/获取架构。
使用我的旧字符串协议(protocol),我只在字符串的开头有消息的类型。
我怀疑我错过了一些重要的东西。
最佳答案
消息的类型不是序列化数据的一部分。如果您没有其他方法来指定它,那么您可以创建另一个包含 Hitcommand 或 MoveCommand 的消息(可能称为 Envelope)。然后,您始终可以反序列化信封并查看是否定义了 Hitcommand 或 MoveCommand。
关于java - 要使用模式反序列化的 byte[] 中的对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33303895/