我直接使用 Kryo IO 对字符串、Longs 和 Doubles 进行我自己的低级原始序列化。
我想知道的是,Kryo IO 是否有办法在读回序列化字节时自动检测原始数据类型?
如果我有一个包含 10 个序列化值的字节数组,但我不知道它们是字符串、长整数还是双精度值;Kryo 有什么方法可以确定数据类型(如 MsgPack 可以)?
我直接使用 Kryo IO 对字符串、Longs 和 Doubles 进行我自己的低级原始序列化。
我想知道的是,Kryo IO 是否有办法在读回序列化字节时自动检测原始数据类型?
如果我有一个包含 10 个序列化值的字节数组,但我不知道它们是字符串、长整数还是双精度值;Kryo 有什么方法可以确定数据类型(如 MsgPack 可以)?
Kryo
在这方面与普通的 Java 序列化没有什么不同。反序列化器有两种方法可以知道它每次反序列化的类型:
它是已知类中的一个字段,因此反序列化器实现以正确的顺序读取每个字段。
流中以某种方式嵌入了类型信息以使其知道。中的writeClassAndObject()
方法Kryo
就是这样做的——它将一个紧凑的类标识符添加到实际的对象内容中,让反序列化器知道该做什么。
或者,您可以手动执行类似的操作,例如通过发送一个字节,该字节将在有限数量的支持类型中进行选择。
此外,这也是MessagePack
格式要求的......