質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

シリアライゼーション

シリアライゼーションとはデータ構造を特定のフォーマットに変換するプロセスのことです。これはデータの保存・送信・もしくは後々の再構築を容易にするために行われます。

Q&A

1回答

768閲覧

scalaのデシリアライズでエラーになる

k-ta

総合スコア7

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

シリアライゼーション

シリアライゼーションとはデータ構造を特定のフォーマットに変換するプロセスのことです。これはデータの保存・送信・もしくは後々の再構築を容易にするために行われます。

0グッド

0クリップ

投稿2018/02/04 05:58

編集2018/02/04 06:59

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

当方の環境で実行したところ、問題なく動作しました。
scala:バージョン2.12.4、
sbt:バージョン1.1.0
Java:バージョン9.0.1
OS:Windows10

java.lang.ArrayStoreException: は
不正な型のオブジェクトをオブジェクトの配列に格納しようとした場合に発生するようです。

①読み込んでいるファイルが出力したファイルと別
②出力した後、手を加えてしまってフォーマットが崩れた
③文字化けしてしまって変なデータになってしまっている

上記のような場合があるかもしれないので、
出力したファイルを見直してみるとよいかもしれません。

投稿2018/02/07 01:34

kaidi

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問