故障排查
本页涵盖了使用跨语言序列化时的常见问题和解决方案。
类型注册错误
"类型未注册"错误
症状:
Error: Type 'example.Person' is not registered
原因: 在反序列化之前未注册类型,或类型名称不匹配。
解决方案:
-
确保类型在双方使用相同的名称注册:
// Java
fory.register(Person.class, "example.Person");# Python
fory.register_type(Person, typename="example.Person") -
检查类型名称中的拼写错误或大小写差异
-
在任何序列化/反序列化调用之前注册类型
"类型 ID 不匹配"错误
症状:
Error: Expected type ID 100, got 101
原因: 跨语言使用了不同的类型 ID。
解决方案: 使用一致的类型 ID:
// Java
fory.register(Person.class, 100);
fory.register(Address.class, 101);
# Python
fory.register_type(Person, type_id=100)
fory.register_type(Address, type_id=101)
类型映射问题
整数溢出
症状: 值被截断或意外包装。
原因: 跨语言使用了不同的整数大小。
解决方案:
-
在 Python 中,使用显式类型注解:
@dataclass
class Data:
value: pyfory.Int32Type # 而不仅仅是 'int' -
确保整数范围兼容:
int8:-128 到 127int16:-32,768 到 32,767int32:-2,147,483,648 到 2,147,483,647
浮点精度损失
症状: 浮点值的精度出乎意料。
原因: 混合使用 float32 和 float64 类型。
解决方案:
-
使用一致的浮点类型:
@dataclass
class Data:
value: pyfory.Float32Type # 显式 32 位浮点数 -
请注意,Python 的
float默认映射到float64