Boolean不可序列化?

时间:2016-05-15 18:59:16

标签: scala serializable

考虑这个小小的片段:

redis = Redis.new(:url => uri)
redis.psubscribe

这有点令人惊讶..动机是支持一系列适度的类 - 基元和自定义类(显式`扩展Serializable)。

那么处理这些原语的自动序列化的方法是什么?

2 个答案:

答案 0 :(得分:7)

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之间存在某种跨平台序列化。

答案 1 :(得分:1)

您可以使用ObjectOutputStream / ObjectInputStream来序列化/反序列化对象:

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()

}

这些流类是Java(而不是Scala)二进制序列化框架的一部分。因此,类可以将java.io.Serializable扩展为可序列化。 boolean原语被视为java.io.Serializable

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