你能否安全地使用OpenJDK反序列化使用Oracle JDK序列化的某些二进制数据?(反之亦然)
假设Java版本相同(并且类代码在两个阶段都可用且相同)。
Oracle JVM序列化对象的确切方式是否被视为公共信息?
你能否安全地使用OpenJDK反序列化使用Oracle JDK序列化的某些二进制数据?(反之亦然)
假设Java版本相同(并且类代码在两个阶段都可用且相同)。
Oracle JVM序列化对象的确切方式是否被视为公共信息?
扩展一下@morgano、@RealSkeptic和@EJP的评论(应给予他们荣誉):是的,Java对象序列化是由一个官方规范指导的,这个规范是公开的,因此任何进行序列化的JVM实现都应该符合它,否则就不能被称为JVM。
我会说这并不完全安全。在我的Android应用程序中,我无法在Android 7设备上反序列化由Android 6设备序列化的数据。显然,Google在Android 7中切换到了OpenJDK。 我遇到的错误是:
java.io.StreamCorruptedException: invalid type code: 71
这是一个相当大的问题,因为我的应用程序通过互联网发送序列化数据,如果它在Android 6(或更低版本)和Android 7上运行,则不兼容。