Как уже говорилось, вы можете определить свои собственные методы writeObject и readObject.
@throws(classOf[java.io.IOException])
private def writeObject(out : java.io.ObjectOutputStream) : Unit = /* your definition here */
Однако будьте осторожны при выполнении этого для вложенных классов, объектов или признаков.
@ сериализуемая
class Foo (x: Int) {
@serializable объект X {def y = x}
}
Если я сериализую объект X, он фактически сериализует содержащий класс Foo, поэтому он также должен быть сериализуемым. Это может быть PITA, чтобы иметь дело с пользовательскими методами сериализации, так что вот честное предупреждение.
Еще одна болевая точка - сериализация замыканий. Постарайтесь сохранить мысленную модель того, какие переменные фиксируются в сериализованных замыканиях. Убедитесь, что эти переменные - это то, что вы хотите отправить через IO!