我希望能够使用 scala 酸洗来存储案例类的二进制表示。
我想知道是否有办法管理案例类的版本控制(协议缓冲区允许这样做的方式)
这是我的例子
我在某个日期制作了一个程序,具有以下案例类
case class MessageTest(a:String,b:String)
然后我序列化这个类的一个实例
import scala.pickling._
import binary._
val bytes=MessageTest("1","2").pickle
然后我将结果存储到一个文件中
稍后,我现在可能必须对我的案例类进行改进,以添加一个新的可选字段
case class MessageTest (a:String,b:String,c:Option[String]=None)
我希望能够重用我之前存储在文件中的数据,以反序列化它并能够恢复案例类的实例(使用新参数的默认值)
但是当我使用下面的代码
import scala.pickling._
import binary._
val messageback=bytes.unpickle[MessageTest]
我收到以下错误:
java.lang.ArrayIndexOutOfBoundsException: 26 at scala.pickling.binary.BinaryPickleReader$$anonfun$2.apply(BinaryPickleFormat.scala:446) at scala.pickling.binary.BinaryPickleReader$$anonfun$2.apply(BinaryPickleFormat.scala:434) at scala.pickling.PickleTools$class.withHints(Tools.scala:498) 在 scala.pickling.binary.BinaryPickleReader.withHints(BinaryPickleFormat.scala:425) 在 scala.pickling.binary.BinaryPickleReader.beginEntryNoTagDebug(BinaryPickleFormat.scala:434)在 scala.pickling.binary.BinaryPickleReader.beginEntryNoTag(BinaryPickleFormat.scala:431)
我做错什么了吗 ?
有没有一种现有的方法可以让我的场景发挥作用?
问候