Java 字节[]中要使用架构反序列化的对象类型?

Java 字节[]中要使用架构反序列化的对象类型?,java,protocol-buffers,protostuff,Java,Protocol Buffers,Protostuff,我试图用一个使用protobuf的协议来替换我的基于字符串的协议。我使用以下命令序列化移动命令: Schema<MoveCommand> schema = RuntimeSchema.getSchema(MoveCommand.class); ProtostuffIOUtil.toByteArray(this, schema, buffer) Schema<Hitcommand> schema = RuntimeSchema.getSchema(Hitcommand.c

我试图用一个使用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)
Schema Schema=RuntimeSchema.getSchema(MoveCommand.class);
ProtostuffIOUtil.toByteArray(此、架构、缓冲区)
和我的命中命令:

Schema<MoveCommand> schema = RuntimeSchema.getSchema(MoveCommand.class);
ProtostuffIOUtil.toByteArray(this, schema, buffer)
Schema<Hitcommand> schema = RuntimeSchema.getSchema(Hitcommand.class);
ProtostuffIOUtil.toByteArray(this, schema, buffer)
Schema Schema=RuntimeSchema.getSchema(Hitcommand.class);
ProtostuffIOUtil.toByteArray(此、架构、缓冲区)
这是没有问题的。当我序列化结果为字节[]时,此数据将通过套接字发送到serversocket

在服务器端,我读取了byte[]数组,但是如何确定byte[]数组中的对象类型呢?(它是and HITCOMAND还是MoveCommand?)

我之所以这样做,是因为要反序列化,我需要一个模式,只有当我知道byte[]数组中对象的类时,我才能创建/获取该模式

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


我怀疑我遗漏了一些关键信息。

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

信封的想法很好,我将尝试实现它。谢谢你的主意!(无法编辑我的原始评论)但这是否意味着您必须反序列化两次?首先是信封,然后是Move/Hit命令。不,您的信封模式包括其他两个模式,因此,一旦您反序列化信封,protobuf将反序列化所有内容。我做了一个小测试项目,并做了一些测试,在犯了一些错误后,我使它正常工作。谢谢你的帮助,我很感激!请检查以下答案: