【发布时间】:2019-03-04 13:18:48
【问题描述】:
我正在关注basic example of scala object serialization。但是,在运行以下单元测试时
package mytest
import java.io.{ByteArrayOutputStream, ObjectOutputStream}
import org.scalatest.{Matchers, WordSpec}
class BasicSerializationSpec extends WordSpec with Matchers {
@SerialVersionUID(123L)
class TestRecord(var content: String) extends Serializable {
override def toString = s"TestRecord($content)"
}
"A TestRecord" should {
"be serializable" in {
val oo = new ObjectOutputStream(new ByteArrayOutputStream())
val tr = new TestRecord("42")
oo.writeObject(tr)
oo.close
}
}
}
我得到一个例外:
org.scalatest.Assertions$AssertionsHelper java.io.NotSerializableException: 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 在 java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 在 java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 在 java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 在 mytest.BasicSerializationSpec.$anonfun$new$2(BasicSerializationSpec.scala:20)
我已尝试显式设置类型
val tr : java.io.Serializable = new TestRecord("42")
但还是没有运气。
如何正确地将 scala 对象序列化为 java ObjectOutputStream?
这不是 other stack answers 的重复,因为我显然是在使用我的类声明扩展 Serializable。
提前感谢您的考虑和回复。
【问题讨论】:
标签: java scala serialization