我有两个应用程序需要相互通信。App1需要能够序列化App2可以反序列化的对象。很容易做到,对吧?这就是问题所在;App1是基于C#的,App2是基于Java的。因此,App1需要以Java二进制文件格式写出文件。如何做到这一点?
在我看来,我有两个选择。第一种方法是找出在C#中序列化Java对象的方法,以便App1只创建适当的文件。我的另一个选择是用Java编写一个转换器,它读取一个文件并相应地填充对象,然后序列化新填充的对象。这样,C#应用程序就只需要写出某种格式化的文本文件,然后转换器就会对其进行解释。
我不能对Java应用程序进行任何更改。
这应该怎么做呢?
更新:
Java应用程序已经掌握在客户手中,因此更改序列化方案将导致客户现有数据不兼容。Java App在处理此对象时使用原生java序列化。对Java应用程序的修改不会发生。
C#应用程序使用协议缓冲区来序列化自己的数据。
发布于 2009-05-04 21:35:04
最好的答案是选项3:使用语言中立的序列化方案。
我使用JavaScript。Thrift是另一种选择,我认为协议缓冲区更专注于RPC,但也应该可用于序列化。XML或自定义的二进制格式可能是其他选择。
编辑:对不起,没有注意到您不能对Java应用程序进行更改。也就是说,最好的方法可能是创建自己定义良好的格式,编写一个可以读取该格式的java应用程序,然后为遗留应用程序输出一个序列化的java对象。
发布于 2009-05-04 21:36:38
"IKVM“可能是你需要用到的。此产品允许您转换编译的java字节码(.jar等)转换为.NET动态链接库。它非常容易使用,可能会为您提供所需的互操作。
除此之外,不使用二进制级互操作的最简单方法是使用纯文本格式,如CSV或XML。
发布于 2009-05-04 21:38:32
只需使用XML序列化即可。这两个框架都有很好的支持,其简单性将使其更容易调试/维护。用Java编写一个小程序,导入XML并写入二进制文件。
https://stackoverflow.com/questions/822163
复制相似问题