Я пробую простейшие примеры сериализации класса:
@serializable class Person(age:Int) {}
val fred = new Person(45)
import java.io._
val out = new ObjectOutputStream(new FileOutputStream("test.obj"))
out.writeObject(fred)
out.close()
Это исключает исключение "java.io.NotSerializableException: Main $$ anon $1 $Person" на мне. Зачем? Есть ли простой пример сериализации? Я также пробовал
@serializable class Person(nm:String) {
private val name:String=nm
}
val fred = new Person("Fred")
...
и попытался удалить @serializable
и некоторые другие перестановки. Файл "test.obj" создается размером более 2 КБ и имеет правдоподобное содержимое.
EDIT:
Чтение "test.obj" назад (из второго ответа ниже) вызывает
Добро пожаловать в Scala версию 2.10.3 (виртуальная машина с 64-разрядным сервером Java HotSpot TM) Java 1.7.0_51). Введите выражения, чтобы они были оценены. Тип: помощь для получения дополнительной информации.
scala > import java.io._ import java.io._
scala > val fis = new FileInputStream ( "test.obj" ) fis: java.io.FileInputStream = [email protected]
scala > val oin = new ObjectInputStream (fis) oin: java.io.ObjectInputStream = [email protected]
scala > val p = oin.readObject java.io.WriteAbortedException: запись прервана; java.io.NotSerializableException: Main $$ anon $1 в java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1354) в java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990) в java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915) в java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798) в java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1350) в java.io.ObjectInputStream.readObject(ObjectInputStream.java:370) в 12) в.() в 7) в.() в $print() at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:606) в scala.tools.nsc.interpreter.IMain $ReadEvalPrint.call(IMain.scala: 734) в scala.tools.nsc.interpreter.IMain $Request.loadAndRun(IMain.scala: 983) в scala.tools.nsc.interpreter.IMain.loadAndRunReq $1 (IMain.scala: 573) в scala.tools.nsc.interpreter.IMain.interpret(IMain.scala: 604) в scala.tools.nsc.interpreter.IMain.interpret(IMain.scala: 568) в scala.tools.nsc.interpreter.ILoop.reallyInterpret $1 (ILoop.scala: 756) в scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala: 801) в scala.tools.nsc.interpreter.ILoop.command(ILoop.scala: 713) в scala.tools.nsc.interpreter.ILoop.processLine $1 (ILoop.scala: 577) в scala.tools.nsc.interpreter.ILoop.innerLoop $1 (ILoop.scala: 584) в scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala: 587) в scala.tools.nsc.interpreter.ILoop $$ anonfun $process $1.apply $mcZ $sp (ILoop.scala: 878) в scala.tools.nsc.interpreter.ILoop $$ anonfun $process $1.apply(ILoop.scala: 833) в scala.tools.nsc.interpreter.ILoop $$ anonfun $process $1.apply(ILoop.scala: 833) в scala.tools.nsc.util.ScalaClassLoader $.savingContextLoader(ScalaClassLoader.scala: 135) в scala.tools.nsc.interpreter.ILoop.process(ILoop.scala: 833) at scala.tools.nsc.MainGenericRunner.runTarget $1 (MainGenericRunner.scala: 83) в scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala: 96) в scala.tools.nsc.MainGenericRunner $.main(MainGenericRunner.scala: 105) в scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala) Причиненный по: java.io.NotSerializableException: Main $$ anon $1 в java.io.ObjectOutputStream.writeObject0 (ObjectOutputStream.java:1183) в java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547) в java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508) в java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431) в java.io.ObjectOutputStream.writeObject0 (ObjectOutputStream.java:1177) в java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347) на Main $$ anon $1. (a.scala: 11) на Main $.main(a.scala: 1) на Main.main(a.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:606) в scala.tools.nsc.util.ScalaClassLoader $$ anonfun $run $1.apply(ScalaClassLoader.scala: 71) в scala.tools.nsc.util.ScalaClassLoader $class.asContext(ScalaClassLoader.scala: 31) в scala.tools.nsc.util.ScalaClassLoader $URLClassLoader.asContext(ScalaClassLoader.scala: 139) в scala.tools.nsc.util.ScalaClassLoader $class.run(ScalaClassLoader.scala: 71) в scala.tools.nsc.util.ScalaClassLoader $URLClassLoader.run(ScalaClassLoader.scala: 139) в scala.tools.nsc.CommonRunner $class.run(ObjectRunner.scala: 28) в scala.tools.nsc.ObjectRunner $.run(ObjectRunner.scala: 45) в scala.tools.nsc.CommonRunner $class.runAndCatch(ObjectRunner.scala: 35) в scala.tools.nsc.ObjectRunner $.runAndCatch(ObjectRunner.scala: 45) в scala.tools.nsc.ScriptRunner.scala $инструменты $NSC $ScriptRunner $$ runCompiled (ScriptRunner.scala: 171) в scala.tools.nsc.ScriptRunner $$ anonfun $runScript $1.apply(ScriptRunner.scala: 188) в scala.tools.nsc.ScriptRunner $$ anonfun $runScript $1.apply(ScriptRunner.scala: 188) в scala.tools.nsc.ScriptRunner $$ anonfun $withCompiledScript $1.apply $mcZ $sp (ScriptRunner.scala: 157) at scala.tools.nsc.ScriptRunner $$ anonfun $withCompiledScript $1.apply(ScriptRunner.scala: 131) at scala.tools.nsc.ScriptRunner $$ anonfun $withCompiledScript $1.apply(ScriptRunner.scala: 131) at scala.tools.nsc.util.package $.trackingThreads(package.scala: 51) at scala.tools.nsc.util.package $. ОжиданиеForThreads (package.scala: 35) в scala.tools.nsc.ScriptRunner.withCompiledScript(ScriptRunner.scala: 130) в scala.tools.nsc.ScriptRunner.runScript(ScriptRunner.scala: 188) в scala.tools.nsc.ScriptRunner.runScriptAndCatch(ScriptRunner.scala: 201) at scala.tools.nsc.MainGenericRunner.runTarget $1 (MainGenericRunner.scala: 76) ... 3 больше