我希望能够使用scala pickling来存储案例类的二进制表示.
我想知道是否有办法管理案例类的版本控制(协议缓冲区允许的方式)
这是我的例子
我在某个日期创建一个程序,具有以下案例类
case class MessageTest(a:String,b:String)
Run Code Online (Sandbox Code Playgroud)
然后我序列化了这个类的一个实例
import scala.pickling._
import binary._
val bytes=MessageTest("1","2").pickle
Run Code Online (Sandbox Code Playgroud)
然后我将结果存储到一个文件中
稍后,我可能现在必须在我的case类上进行演化,添加一个新的可选字段
case class MessageTest (a:String,b:String,c:Option[String]=None)
Run Code Online (Sandbox Code Playgroud)
我希望能够重用我先前存储在我的文件中的数据,对其进行反序列化,并能够恢复案例类的实例(新参数的默认值)
但是当我使用以下代码时
import scala.pickling._
import binary._
val messageback=bytes.unpickle[MessageTest]
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
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 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)
我做错什么了吗 ?
是否存在使我的场景工作的现有方法?
问候