【问题标题】:Deserializing C# Binary in Java在 Java 中反序列化 C# 二进制文件
【发布时间】:2023-03-10 21:20:01
【问题描述】:

我有一个系统,其中使用 C# 程序创建序列化文件,然后在另一个 C# 程序中反序列化。我想知道是否可以在 Java 中对 C# 文件进行二进制反序列化?

谢谢

【问题讨论】:

  • 我不认为,java可以使用BinaryFormatter的输出,但是可以使用Xml,Json,Protobuf。
  • @I4V:当然,Java可以使用 .Net 二进制格式化程序的输出。只是没有已知的实现...... :)
  • @BorisB。谢谢我不知道这个:)

标签: c# java .net serialization


【解决方案1】:

您可以尝试使用一些具有两个平台实现的序列化器,并以独立于平台的格式输出数据,例如 Protobuf。

或者,如果您需要在 Java 和 C# 应用程序之间通过网络进行完整的 RPC,则可以使用 Apache Thrift。

【讨论】:

    【解决方案2】:

    我假设您说的是用BinaryFormatter 序列化的对象。那么答案是合格的“是”,因为 Java 实现了图灵机。但是,这并不简单。

    在这种情况下,数据将采用最适合 .NET 运行时使用的格式,并将包含有关 .NET 类型和程序集的信息。您必须为这种格式实现自己的阅读器,然后有一些方法可以在 .NET 和 Java 类型之间进行映射。 (Mono 项目实现了与.NET 兼容的BinaryFormatter,因此您可以使用their reader implementation 作为参考。)

    作为替代方案,请考虑使用另一种格式进行数据序列化,例如 JSON。这将使您能够即时移植到多种语言,并可以轻松地人工检查数据。

    【讨论】:

    • JSON 在技术上不是二进制序列化。也许它是 OP 的可行替代方案。只是指出这一点。
    • @WilliamMorrison 我从未声称它是二进制序列化。 OP 并未表明二进制序列化是一项要求,他们只是询问是否可以从 Java 中读取特定格式的二进制序列化 C# 对象图。
    • 这不是 OP 要求的,这就是我要说的。
    • OP 也没有要求 Protobuf,他们正在讨论 .NET Framework 中内置的二进制对象序列化。根据您的逻辑,建议 任何替代格式 是“不是 OP 要求的。”
    • Protobuf 是一种二进制序列化替代方案,这就是我建议它的原因。 JSON 不是。如果您想讨论我的答案,请按照我的答案进行。
    【解决方案3】:

    在 Java 中反序列化使用 C# 的内置二进制序列化序列化的对象,您会在 Java 中实现 C# 的反序列化逻辑。这是一个相当复杂的过程,所以让我们比较一些选项:

    1. 使用适用于 C# 和 Java 的第三方库进行序列化。

    2. 编写一个例程来序列化每个对象。一个在 C# 中,一个在 Java 中。这将是乏味的,并且难以维护。

    3. 在 Java 中实现 C# 的序列化逻辑,反之亦然。这将是困难的、耗时的,而且您可能不会第一次就做好。

    我推荐选项 1,使用第三方库。这是我用过并强烈推荐的两个第三方库。

    Google ProtoBufs

    Apache Thrift

    【讨论】:

      【解决方案4】:

      您可以使用任何跨平台的二进制格式。您的选择包括:

      • Protobuf
      • BSON(二进制 JSON)
      • GZIP

      JSON 和 XML (herrrrp) 也是选项,尽管是基于文本的选项。

      另一种选择是对数据进行 base64 编码,然后在另一端对其进行解码;尽管你可能会得到一个巨大的有效载荷,因为它是二进制的(可能不是一个好主意)。

      【讨论】:

      • gzip 是压缩格式。我看不出它如何适合该列表。你还有别的意思吗?
      • @leppie 如果它是同一个物理系统,则将其压缩到一个程序中并在另一个程序中解压缩。这不是你想要的吗?即使是网络,您也可以通过网络发送并在另一端解压缩。
      猜你喜欢
      • 2020-03-07
      • 2012-01-04
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 2011-06-21
      • 2014-10-16
      • 1970-01-01
      相关资源
      最近更新 更多