如何在OpenJDK(Android 7+)中反序列化对象,该对象已在Apache Harmony(Android * -6)中序列化?

我的应用程序使用http://prevayler.org/进行持久化,捎带Java对象序列化。 升级到Android 7.0(Nougat)后,用户无法打开他们的数据,因为反序列化不再起作用:

java.io.StreamCorruptedException: invalid type code: 71 at java.io.ObjectInputStream.readString(ObjectInputStream.java:1647) at java.io.ObjectInputStream.readEnum(ObjectInputStream.java:1737) ... at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) at org.prevayler.foundation.serialization.JavaSerializer.readObject(JavaSerializer.java:34) ... at org.prevayler.PrevaylerFactory.snapshotManager(PrevaylerFactory.java:368) at org.prevayler.PrevaylerFactory.create(PrevaylerFactory.java:316) at com.tennismath.prevayler.PrevaylerServiceImpl.getSystemPrevayler(PrevaylerServiceImpl.java:51) 

在反序列化枚举时,OpenJDK例程读取意外的字节值“71”并抛出exception,从源代码可以看出: http : //grepcode.com/file/repository.grepcode.com/java/根/ JDK /的openjdk / 8u40-B25 / JAVA / IO / ObjectInputStream.java#ObjectInputStream.readString%28boolean%29

我有以下想法:

  1. 设置迁移服务器,该服务器将运行Harmony和OpenJDK进程,这些进程将执行数据迁移。
  2. 破解二进制格式并修复枚举序列化(假设它是唯一的一个问题,我怀疑)
  3. 使用AspectJ破解反序列化

所有这些选择似乎都是矫枉过正或不满意。 在我开始攻击二进制文件之前,也许任何人都可以更好地了解如何使用新的运行时对旧数据进行反序列化? 谢谢。