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