跳到主要内容
版本:dev

Fory Creation

This page covers Kotlin-specific requirements for creating Fory instances.

Basic Setup

When using Fory for Kotlin serialization, register Kotlin serializers via KotlinSerializers.registerSerializers(fory):

import org.apache.fory.Fory
import org.apache.fory.serializer.kotlin.KotlinSerializers

val fory = Fory.builder()
.requireClassRegistration(true)
.build()

// Register Kotlin serializers
KotlinSerializers.registerSerializers(fory)

Thread Safety

Fory instance creation is not cheap. Instances should be shared between multiple serializations.

Single-Thread Usage

import org.apache.fory.Fory
import org.apache.fory.serializer.kotlin.KotlinSerializers

object ForyHolder {
val fory: Fory = Fory.builder()
.requireClassRegistration(true)
.build().also {
KotlinSerializers.registerSerializers(it)
}
}

Multi-Thread Usage

For multi-threaded applications, use ThreadSafeFory:

import org.apache.fory.Fory
import org.apache.fory.ThreadSafeFory
import org.apache.fory.ThreadLocalFory
import org.apache.fory.serializer.kotlin.KotlinSerializers

object ForyHolder {
val fory: ThreadSafeFory = ThreadLocalFory { classLoader ->
Fory.builder()
.withClassLoader(classLoader)
.requireClassRegistration(true)
.build().also {
KotlinSerializers.registerSerializers(it)
}
}
}

Using Builder Methods

// Thread-safe Fory
val fory: ThreadSafeFory = Fory.builder()
.requireClassRegistration(true)
.buildThreadSafeFory()

KotlinSerializers.registerSerializers(fory)

Configuration Options

All configuration options from Fory Java are available. See Java Configuration Options for the complete list.

Common options for Kotlin:

import org.apache.fory.Fory
import org.apache.fory.config.CompatibleMode
import org.apache.fory.serializer.kotlin.KotlinSerializers

val fory = Fory.builder()
// Enable reference tracking for circular references
.withRefTracking(true)
// Enable schema evolution support
.withCompatibleMode(CompatibleMode.COMPATIBLE)
// Enable async compilation for better startup performance
.withAsyncCompilation(true)
// Compression options
.withIntCompressed(true)
.withLongCompressed(true)
.build()

KotlinSerializers.registerSerializers(fory)