scalaのシリアライズに関しての質問です。
以下のコードを scalac
でコンパイルして scala
コマンドで実行すると正常に実行できるのですが、
sbt
から run
すると java.lang.ArrayStoreException となってしまいます。
Arrayに対して不正な型を格納している部分は無いとの認識なのですが、なぜこのような挙動になってしまうのでしょうか。
scalaのバージョンは2.12.4、sbtのバージョンは1.1.0です。
OSはCentOS7です。
scala
1import java.io.ObjectOutputStream; 2import java.io.ObjectInputStream; 3import java.nio.file.Paths; 4import java.nio.file.Files; 5 6case class Data(a: String, b: Int) 7object Main { 8 def main(args: Array[String]): Unit = { 9 val arr: Array[List[Data]] = Array[List[Data]](List(Data("a", 97))) 10 val path = Paths.get("SerializeSample.bin") 11 // serialize 12 val oos = new ObjectOutputStream(Files.newOutputStream(path)) 13 oos.writeObject(arr) 14 oos.close() 15 // deserialize 16 val ois = new ObjectInputStream(Files.newInputStream(path)) 17 val ret = ois.readObject().asInstanceOf[Array[List[Data]]] 18 ois.close() 19 println(ret.mkString(" ")) 20 } 21}
sbt:sbt> run [info] Running Main [error] (run-main-13) java.lang.ArrayStoreException: scala.collection.immutable.List$SerializationProxy [error] java.lang.ArrayStoreException: scala.collection.immutable.List$SerializationProxy [error] at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1975) [error] at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567) [error] at java.io.ObjectInputStream.readObject(ObjectInputStream.java:433) [error] at Main$.main(Main.scala:17) [error] at Main.main(Main.scala) [error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [error] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [error] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [error] at java.lang.reflect.Method.invoke(Method.java:498) [error] at sbt.Run.invokeMain(Run.scala:93) [error] at sbt.Run.run0(Run.scala:87) [error] at sbt.Run.execute$1(Run.scala:65) [error] at sbt.Run.$anonfun$run$4(Run.scala:77) [error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12) [error] at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:10) [error] at sbt.TrapExit$App.run(TrapExit.scala:252) [error] at java.lang.Thread.run(Thread.java:748) [error] java.lang.RuntimeException: Nonzero exit code: 1 [error] at sbt.Run$.executeTrapExit(Run.scala:124) [error] at sbt.Run.run(Run.scala:77) [error] at sbt.Defaults$.$anonfun$bgRunTask$5(Defaults.scala:1168) [error] at sbt.Defaults$.$anonfun$bgRunTask$5$adapted(Defaults.scala:1163) [error] at sbt.internal.BackgroundThreadPool.$anonfun$run$1(DefaultBackgroundJobService.scala:366) [error] at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12) [error] at scala.util.Try$.apply(Try.scala:209) [error] at sbt.internal.BackgroundThreadPool$BackgroundRunnable.run(DefaultBackgroundJobService.scala:289) [error] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [error] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [error] at java.lang.Thread.run(Thread.java:748) [error] (Compile / run) Nonzero exit code: 1 [error] Total time: 0 s, completed 2018/02/04 15:59:19
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。