Scala Serialization Guide
Apache Fory™ Scala provides optimized serializers for Scala types, built on top of Fory Java. It supports all Scala object serialization:
caseclass serializationpojo/beanclass serializationobjectsingleton serializationcollectionserialization (Seq, List, Map, etc.)tupleandeithertypesOptiontypes- Scala 2 and 3 enumerations
Both Scala 2 and Scala 3 are supported.
Features
Fory Scala inherits all features from Fory Java, plus Scala-specific optimizations:
- High Performance: JIT code generation, zero-copy, 20-170x faster than traditional serialization
- Scala Type Support: Optimized serializers for case classes, singletons, collections, tuples, Option, Either
- Default Value Support: Automatic handling of Scala class default parameters during schema evolution
- Singleton Preservation:
objectsingletons maintain referential equality after deserialization - Schema Evolution: Forward/backward compatibility for class schema changes
See Java Features for complete feature list.
Installation
Add the dependency with sbt:
libraryDependencies += "org.apache.fory" %% "fory-scala" % "0.14.1"
Quick Start
import org.apache.fory.Fory
import org.apache.fory.serializer.scala.ScalaSerializers
case class Person(name: String, id: Long, github: String)
case class Point(x: Int, y: Int, z: Int)
object ScalaExample {
// Create Fory with Scala optimization enabled
val fory: Fory = Fory.builder()
.withScalaOptimizationEnabled(true)
.build()
// Register optimized Fory serializers for Scala
ScalaSerializers.registerSerializers(fory)
// Register your classes
fory.register(classOf[Person])
fory.register(classOf[Point])
def main(args: Array[String]): Unit = {
val p = Person("Shawn Yang", 1, "https://github.com/chaokunyang")
println(fory.deserialize(fory.serialize(p)))
println(fory.deserialize(fory.serialize(Point(1, 2, 3))))
}
}
Built on Fory Java
Fory Scala is built on top of Fory Java. Most configuration options, features, and concepts from Fory Java apply directly to Scala. Refer to the Java documentation for:
- Configuration Options - All ForyBuilder options
- Basic Serialization - Serialization patterns and APIs
- Type Registration - Class registration and security
- Schema Evolution - Forward/backward compatibility
- Custom Serializers - Implement custom serializers
- Compression - Int, long, and string compression
- Troubleshooting - Common issues and solutions
Scala-Specific Documentation
- Fory Creation - Scala-specific Fory setup requirements
- Type Serialization - Serializing Scala types
- Default Values - Scala class default values support