Message 类型
用 typed fields、字段 ID 和明确的 optional 字段定义结构化数据类型。
Fory 将跨语言序列化、原生对象支持、Schema IDL/codegen、引用跟踪、Schema 演进和 row-format 访问组合在一起。
通过 xlang 线格式,在一个受支持运行时序列化,在另一个运行时反序列化。
OBJECTS直接使用 Java 类、Python dataclass、Go struct、Rust/C++ struct,以及生成或注解模型。
IDL一次定义 optional、ref、ID、union 和 service 等 schema,再生成各语言原生代码。
ROW无需反序列化完整对象即可读取字段、数组和嵌套值,并在支持语言中对接 Arrow。
FAST使用 Java/JavaScript JIT serializer、Rust/C++/Swift macro、C# source generator、Kotlin KSP 和 Dart build_runner 输出。
MULTI覆盖 Java、Python、C++、Go、Rust、JavaScript/TypeScript、C#、Swift、Dart、Scala、Kotlin 和 Android。
用你的语言创建原生对象,然后分别通过一行 Fory 调用完成序列化和反序列化。
Java supports xlang and native modes, JIT serializers, schema evolution, and Java-native object graph features.
<dependency>
<groupId>org.apache.fory</groupId>
<artifactId>fory-core</artifactId>
<version>1.1.0</version>
</dependency>
import org.apache.fory.Fory;
public record Person(String name, int age) {}
Fory fory = Fory.builder()
.withXlang(true)
.build();
fory.register(Person.class, "Person");
byte[] bytes = fory.serialize(new Person("Alice", 30));
Person out = (Person) fory.deserialize(bytes);
Fory IDL 从熟悉的 message 定义开始,并提供 union 与引用感知字段,表达普通 IDL 容易压平的对象模型。
用 typed fields、字段 ID 和明确的 optional 字段定义结构化数据类型。
把 one-of-several case 映射为 tagged union;在支持的语言中生成原生 union 或 sum type。
当对象会被共享,或图结构中存在环时,用 ref 字段保留引用语义。
package example;
message Dog {
string name = 1;
int32 bark_volume = 2;
}
message Cat {
string name = 1;
int32 lives = 2;
}
union Animal {
Dog dog = 1;
Cat cat = 2;
}
message Node {
string value = 1;
ref Node parent = 2;
list<ref Node> children = 3;
}
在各运行时使用 JIT serializer、source generator、macro、KSP 和 build_runner。
将类型化对象编码为面向快速序列化和反序列化的高效二进制格式。
使用同一层序列化能力,但根据数据跨越的边界选择不同 payload 表面。
当不同语言服务需要直接交换同一份类型化载荷时,使用 xlang。
当对象只在同一运行时内流转,且对象图语义重要时,使用 native mode。
当部分读取和分析类工作负载不应重建完整对象时,使用 row format。
按数据边界选择 wire mode;当模型需要长期维护时推进到 Fory IDL;上线前用多语言 Benchmark 验证实际路径。
跨语言共享 payload 时使用 xlang;同运行时流量需要更完整的语言对象模型时使用 native mode。
使用指南用 Fory IDL 定义一次模型,生成多语言类型安全代码;契约演进时使用 optional、ref、union 或 service。
Schema IDL 指南按计划上线的运行时对比序列化/反序列化吞吐、payload 大小和复现实验步骤。
Benchmark 图表