Можно ли переопределить потоковые устройства записи в scala @serializable объекты?

Я теперь понимаю, что scala @serializable объекты может использоваться то же в качестве Java сериализуемый объект. В Java сериализуемый объект там является методами, которые можно переопределить, чтобы измениться как объектные потоки: writeObject (ObjectOutputStream) / readObject (ObjectOutputStream).

Можно ли переопределить или ввести ли методы в scala @serializable объект, разрешающий Вам измениться, как объект сериализирует?

10
задан Fred Haslam 9 August 2010 в 19:07
поделиться

2 ответа

Да, вы можете использовать те же методы в Scala, что и в Java:

@throws(classOf[IOException])
private def writeObject(out: ObjectOutputStream): Unit = // ...

@throws(classOf[IOException])
private def readObject(in: ObjectInputStream): Unit = // ...
11
ответ дан 3 December 2019 в 23:10
поделиться

Как уже говорилось, вы можете определить свои собственные методы writeObject и readObject.

@throws(classOf[java.io.IOException])
private def writeObject(out : java.io.ObjectOutputStream) : Unit = /* your definition  here */

Однако будьте осторожны при выполнении этого с вложенными классами, объектами или характеристиками.

@serializable class Foo (x: Int) { @serializable объект X {def y = x} }

Если я сериализую объект X, он фактически сериализует содержащий его класс Foo, поэтому он также должен быть сериализуемым. Это может быть PITA, с которым нужно иметь дело в пользовательских методах сериализации, так что вот справедливое предупреждение.

Другой проблемой может быть сериализация закрытия. Постарайтесь сохранить ментальную модель того, какие переменные фиксируются в сериализованных замыканиях. Убедитесь, что эти переменные - это то, что вы хотите отправить через ввод-вывод!

3
ответ дан 3 December 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: