布尔值不是可序列化的?

Boolean is not Serializable?

考虑这个小片段:

scala> val u = true.asInstanceOf[Serializable]
java.lang.ClassCastException: java.lang.Boolean cannot be cast to scala.Serializable

嗯,这有点令人惊讶。动机是支持适度范围的 类 - 原始和自定义 类(do 显式`扩展可序列化)。

那么如何处理这些图元的自动序列化呢?

您可以使用 ObjectOutputStream/ObjectInputStream 到 serialize/deserialize 个对象:

import java.io.{ObjectOutputStream, FileOutputStream, ObjectInputStream, FileInputStream}

object Test extends App {

    val oos = new ObjectOutputStream(new FileOutputStream("bool.obj"))
    oos.writeObject(true)
    oos.close()

    val ois = new ObjectInputStream(new FileInputStream("bool.obj"))
    val obj = ois.readObject()
    println(obj) // Prints: true
    ois.close()

}

那些流 classes 是 Java(不是 Scala)二进制序列化框架的一部分。因此,class 将 java.io.Serializable 扩展为可序列化就足够了。 boolean原语被认为是java.io.Serializable:

true.isInstanceOf[scala.Serializable] // false
true.isInstanceOf[java.io.Serializable] // true

java.lang.Boolean 不是 scala.Serializable。但是 java.io.Serializable:

scala> val u = true.asInstanceOf[java.io.Serializable]
u: java.io.Serializable = true

有关 scala.Serializable 的信息,请参阅 http://www.scala-lang.org/api/2.11.8/#scala.Serializable,这似乎表明 JVM 和 .NET 之间存在某种跨平台序列化。