我想禁用特征的序列化,以便扩展此特征的所有类在序列化时都会失败。
我如何在Scala中实现这一目标?
我使用spark,我需要这个,因为类会很大,序列化会导致性能下降,所以我想防止它被错误地序列化。
答案 0 :(得分:4)
这是我的解决方案:
trait NonSerializable extends java.io.Externalizable {
def writeExternal(out: java.io.ObjectOutput): Unit = {
throw new UnsupportedOperationException(getClass() + " is not Serializable")
}
def readExternal(in: java.io.ObjectInput): Unit = {
throw new UnsupportedOperationException(getClass() + " is not Serializable")
}
}
case class Foo(s: String) extends NonSerializable {
}
object Foo extends App {
val bytes = new java.io.ByteArrayOutputStream
val out = new java.io.ObjectOutputStream(bytes)
out.writeObject(Foo("bar"))
}
使用Externalizable
在序列化中注入异常。子类不应覆盖readExternal
或writeExternal
。
注意:NonSerializable
违反了Serializable
的合同。我不确定它是否可以根据Serializable
的合同与其他图书馆合作。