我有一个系统,其中使用C#程序创建序列化文件,然后在另一个C#程序中反序列化。我想知道是否可以在Java中对C#文件进行二进制反序列化?
由于
答案 0 :(得分:4)
您可以尝试使用一些具有两种平台实现的序列化器,并以平台独立格式输出数据,如Protobuf。
或者,如果您需要在Java和C#应用程序之间建立完整的RPC over network,那么您可以选择Apache Thrift。
答案 1 :(得分:3)
我假设您说的是使用BinaryFormatter
序列化的对象。答案是合格的“是”,因为Java实现了图灵机。但是,这不是直截了当的。
在这种情况下,数据将采用最适合.NET运行时使用的格式,并包含有关.NET类型和程序集的信息。您必须为此格式实现自己的阅读器,然后在.NET和Java类型之间进行映射。 (Mono项目实现了与.NET兼容的BinaryFormatter
,因此您可以使用their reader implementation作为参考。)
作为替代方案,请考虑使用其他格式进行数据序列化,例如JSON。这将为您提供各种语言的即时可移植性,以及方便人工检查数据的可能性。
答案 2 :(得分:1)
反序列化用C#内置的二进制序列化序列化的Java中的对象,你将在java中实现C#的反序列化逻辑。这是一个非常复杂的过程,所以让我们比较一些选项:
使用第三方库进行序列化,适用于C#和Java。
编写一个例程来序列化每个对象。一个在C#中,一个在Java中。这将是乏味的,难以维持。
用Java实现C#的序列化逻辑,反之亦然。这将是困难的,耗时的,并且你可能不会在第一次就做对。
我建议使用选项1,使用第三方库。这是我使用并强烈建议的两个第三方库。
答案 3 :(得分:0)
您可以使用任何跨平台二进制格式。您的选择包括:
JSON和XML(herrrrp)也是选项,尽管是基于文本的选项。
另一个选择是对数据进行base64编码,并在另一侧进行解码;虽然你可能得到一个巨大的有效载荷,因为它是二进制的(可能不是一个好主意)。