配置
本页介绍 Kotlin 特有的 Fory 实例配置和创建方式。
Xlang 设置
Fory Kotlin 遵循 Java builder 的默认设置:使用带兼容 Schema 演进的 xlang 模式。 跨语言 Kotlin 载荷、Schema IDL 生成的 Kotlin 模型以及 KSP 生成的 xlang 序列化器都应 使用此路径。
import org.apache.fory.kotlin.ForyKotlin
val fory = ForyKotlin.builder()
.withXlang(true)
.requireClassRegistration(true)
.build()
原生模式设置
对于需要 JVM 原生对象行为的同语言 Kotlin/JVM 载荷,请显式使用原生模式:
import org.apache.fory.kotlin.ForyKotlin
val fory = ForyKotlin.builder().withXlang(false)
.requireClassRegistration(true)
.build()
线程安全
创建 Fory 实例的开销并不低。应在多次序列化之间共享实例。
单线程用法
import org.apache.fory.Fory
import org.apache.fory.kotlin.ForyKotlin
object ForyHolder {
val fory: Fory = ForyKotlin.builder()
.withXlang(true)
.requireClassRegistration(true)
.build()
}
多线程用法
对于多线程应用,请使用 ThreadSafeFory:
import org.apache.fory.ThreadSafeFory
import org.apache.fory.kotlin.ForyKotlin
object ForyHolder {
val fory: ThreadSafeFory = ForyKotlin.builder()
.withXlang(true)
.requireClassRegistration(true)
.buildThreadSafeFory()
}
使用 Builder 方法
// Thread-safe Fory
val fory: ThreadSafeFory = ForyKotlin.builder()
.withXlang(true)
.requireClassRegistration(true)
.buildThreadSafeFory()
配置选项
Fory Java 的所有配置选项均可用。完整列表请参阅 Java 配置。
Kotlin 原生模式载荷的常用选项:
import org.apache.fory.kotlin.ForyKotlin
val fory = ForyKotlin.builder().withXlang(false)
// Enable reference tracking for circular references
.withRefTracking(true)
// Same-schema optimization. Use only when every reader and writer
// always uses the same Kotlin/JVM schema.
.withCompatible(false)
// Enable async compilation for better startup performance
.withAsyncCompilation(true)
// Compression options
.withIntCompressed(true)
.withLongCompressed(true)
.build()
对象图内存预算
Kotlin 使用 Java 的 withMaxGraphMemoryBytes(...) 选项。它为一次根反序列化设置近似的
对象图内存限制,主要针对实体化的集合、map、数组、结构体和对象。字符串、二进制数据、
基本类型标量和稠密基本类型数组等叶子值不计入其中,因此实际进程内存可能高于此值。
叶子值仍受剩余输入字节限制:如果未读输入没有足够的字节,Fory 不会读取或创建该叶子值。
val fory = ForyKotlin.builder()
.withMaxGraphMemoryBytes(128L * 1024 * 1024)
.withMaxUnbackedContainerItems(8192)
.build()
withMaxUnbackedContainerItems(...) 限制一次根反序列化中重复读取主体未消耗相应输入的
集合元素和 map 条目。默认值为 8192;零表示严格限制。
兼容模式
Java builder 在 xlang 和原生模式下都默认启用兼容模式。当模型可能独立演进、服务分别 部署,或 xlang Schema 由不同语言手写时,请保留此默认设置。
只有在反序列化每个载荷所用的类 Schema 始终与序列化时相同,并且希望获得更快的序列化
速度和更小的体积时,才使用 withCompatible(false)。对于 xlang 载荷,只有在确认所有
语言使用相同 Schema 后,或者原生类型由 Fory Schema IDL 生成时,才调用
withCompatible(false)。
安全
有关信任边界、安全的读取端配置和验证方法,请参阅 Kotlin 安全。