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)