【问题标题】:IKVM.NET object serialization with ObjectOutputStream differencesIKVM.NET 对象序列化与 ObjectOutputStream 的区别
【发布时间】:2012-10-01 10:05:02
【问题描述】:

我有一个 java 程序 (jar),它使用 ObjectOutputStream 将一个类序列化为文件。 我需要在 .NET 项目中使用这部分程序,为此我使用 ikvmc.exe 将 jar 转换为 .NET dll。 一切正常,但序列化文件在某些​​部分与直接使用 java 程序序列化的文件不同。 您对拥有相同的序列化文件有什么建议吗?

【问题讨论】:

  • 有没有no方法可以更改 Java 代码以序列化为更便携的格式?
  • 不,我不能。我必须将这些序列化文件发送到不属于我的 Java Web 服务。
  • 使用 Java 二进制序列化 作为其输入格式的 Web 服务?哎呀,太恶心了。你有我的同情:(老实说,你最好运行一个本地 Java 二进制文件(不是 IKVM,只是普通的 Java),它采用更理智的输入形式(例如 JSON)并且只是负责用于序列化。
  • 是的,我创建了一个可调用的 java 二进制文件,其中包含导入 jar 库并使用其方法的参数(路径输入、路径输出等)。现在我必须简单地使用 .NET 中的 Process 类调用我的 java 二进制文件。
  • 文件不同是什么意思?您是否收到一些反序列化异常?

标签: java .net serialization objectoutputstream ikvm


【解决方案1】:

Java 序列化和反序列化只有在双方都使用相同的编译类时才能发挥作用。如果你序列化 Java VM 运行时的类,那么你应该在两边使用完全相同的 VM 版本。在另一种情况下,类可以有不同的serialVersionUID。

取决于 IKVM 版本,它取决于不同的 OpenJDK 版本。例如基于 OpenJDK 1.7.0 的 7.x 版本。

【讨论】:

  • 我需要的 java 程序,序列化一个包含一些其他自定义对象的 Vector 对象。也许使用 OpenJDK 1.7 和 Sun 1.7 进行序列化会生成不同的文件,因为 Vector 类具有不同的 serialVersionUID,对吗?
  • OpenJDK 和 Sun/Oracle JDK 之间的差异很小。 1.6 和 1.7 之间的差异可能更大。但是 Vector 类不是问题。如果您没有收到确切的错误信息,您的答案就像是在看水晶球。
猜你喜欢
  • 1970-01-01
  • 2019-11-17
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2012-04-04
  • 2015-08-13
相关资源
最近更新 更多