byte[] 中要使用模式反序列化的对象类型?
Type of object in byte[] to deserialize with schema?
我正在尝试将基于字符串的协议替换为使用 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?)
我问这个是因为要反序列化我需要一个模式,当我知道字节 [] 数组中的对象的 class 时,我只能 create/get 模式。
使用我的旧字符串协议,我只有字符串开头的消息类型。
我怀疑我遗漏了一些重要的东西。
消息的类型不是序列化数据的一部分。如果您没有其他方式来指定它,那么您可以创建另一个消息(可能称为信封),其中包含一个 Hitcommand 或一个 MoveCommand。然后您可以随时反序列化信封并查看是否定义了 Hitcommand 或 MoveCommand。
我正在尝试将基于字符串的协议替换为使用 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?)
我问这个是因为要反序列化我需要一个模式,当我知道字节 [] 数组中的对象的 class 时,我只能 create/get 模式。
使用我的旧字符串协议,我只有字符串开头的消息类型。
我怀疑我遗漏了一些重要的东西。
消息的类型不是序列化数据的一部分。如果您没有其他方式来指定它,那么您可以创建另一个消息(可能称为信封),其中包含一个 Hitcommand 或一个 MoveCommand。然后您可以随时反序列化信封并查看是否定义了 Hitcommand 或 MoveCommand。