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

标签 java protocol-buffers protostuff

我正在尝试用使用 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/

相关文章:

c# - 如何让protobuf-net和protostuff相互支持.Net和Java中的继承类?

java - Android 简单计算器应用程序崩溃和逻辑

java - 无法解析 Criteria API 中的嵌入实体

java - Tablelayout应该将行数一一增加?

c# - 如何从用属性修饰的 C# 类生成 .proto 文件?

protocol-buffers - 在 Protocol Buffers 消息文件中定义 uint8_t 变量

java - 扩展到另一个包中的类的最快方法,与当前包中的类同名

python - Protobuf,在python3.6中编译后导入报错

java - Protostuff - 在 Windows 中为 .java 文件生成不正确的输出路径

java - 添加字段以响应 API 时的向后兼容性